因此,我正在研究此Codeforces problem,并编写了一个程序来解决它,但是它没有打印出正确的答案,因此我决定尝试对其进行调试。以下是代码:

#include <iostream>
using namespace std;

int maxof(int a[], int m)
{
  int x = a[0];
  for (int i = 1; i < m; i++)
    if (x < a[i])
      x = a[i];
  return x;
}

int maxind(int a[], int m)
{
  int x = maxof(a,m);
  int n = 0;
  while (a[n] != x)
    n++;
  return n;
}

...

int maxcost(int a[], int n, int m)
{
  int x = 0;
  for (int i = 0; i < n; i++) {
    /*
    for (int j = 0; j < m; j++)
      cout << a[j] << " ";
    cout << endl;
    */
    x += maxof(a,m);
    a[maxind(a,m)]--;
  }
  return x;
}

...

int main()
{
  int n,m;
  cin >> n >> m;
  int a[m];
  for (int i = 0; i < m; i++)
    cin >> a[i];
  /*
  for (int i = 0; i < m; i++)
    cout << a[i] << " ";
  cout << endl;
  */
  cout << maxcost(a,n,m) << " " << mincost(a,n,m);
}


因此,如果我取出/ * * /块并使用输入运行程序

4 3
2 1 1


它应该打印出来:

2 1 1
2 1 1
1 1 1
0 1 1
0 0 1
0 0 0
5 5


但它正在打印:

2 1 1
2 -3 1
1 -3 1
0 -3 1
0 -3 0
4 4


这个随机-3是从哪里来的,我该如何解决?

最佳答案

在您的情况下,在maxcostmincost之间未定义评估顺序

maxcost修改a,所以我认为mincost也是一样。

在您的情况下,首先计算mincost,因此maxcost获得修改后的a作为输入。

调用前或在a内部克隆maxValueCost(与minValueCost相同)。
或确保maxcostmincost不变。

关于c++ - C++有故障吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20768216/

10-11 00:16