【发布时间】:2020-06-23 15:05:31
【问题描述】:
这是一个非常简单的代码,应该可以解决切割棒优化问题。大多数情况下它会输出正确的输出,但有时会给出随机答案。我不知道是什么原因造成的。
代码:
#include <iostream>
#include <limits>
int cutRod(int p[], int n);
int max(int a, int b);
int main()
{
int n = 10;
int p[n] = {1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
int numOfCuts = cutRod(p, n);
std::cout << "Cuts: " << numOfCuts << std::endl;
return 0;
}
int cutRod(int p[], int n)
{
if (n == 0)
{
return 0;
}
int q = INT32_MIN;
for (int i = 0; i <= n; ++i)
{
q = max(q, p[i] + cutRod(p, n-i-1));
}
return q;
}
int max(int a, int b){
if (a >= b)
{
return a;
}
else if (b > a)
{
return b;
}
}
如何重新生成错误:
只需运行该程序几次。大多数时候,它给出 30 作为答案。哪个是对的。但其他时候,它会给出一个随机的大数作为输出。
【问题讨论】:
-
int n = 10; int p[n]不是有效的 C++。n必须是const,或者直接改成int p[] = {…} -
i <= nin loop 应该是i < n。
标签: c++ algorithm optimization