因此,我正在研究此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是从哪里来的,我该如何解决?
最佳答案
在您的情况下,在maxcost
和mincost
之间未定义评估顺序maxcost
修改a
,所以我认为mincost
也是一样。
在您的情况下,首先计算mincost
,因此maxcost
获得修改后的a
作为输入。
调用前或在a
内部克隆maxValueCost
(与minValueCost
相同)。
或确保maxcost
和mincost
不变。
关于c++ - C++有故障吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20768216/