当我像这样四次嵌套循环时,
int time[257] = {};
for(int i1 = 1; i1 < 65; i1++)
for(int i2 = 1; i2 < 65; i2++)
for (int i3 = 1; i3 < 65; i3++)
for (int i4 = 1; i4 < 65; i4++)
time[i1 + i2 + i3 + i4]++;
它能够正确输出。
for (int i = 1; i < 257; i++) {
cout << time[i] << endl;
}
但是,当我将嵌套的for循环增加到8次时,没有任何输出。
for (int i1 = 1; i1 < 66; i1++)
for (int i2 = 1; i2 < 66; i2++)
for (int i3 = 1; i3 < 66; i3++)
for (int i4 = 1; i4 < 66; i4++)
for (int i5 = 1; i5 < 66; i5++)
for (int i6 = 1; i6 < 66; i6++)
for (int i7 = 1; i7 < 66; i7++)
for (int i8 = 1; i8 < 66; i8++)
time[i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8]++;
我已经使用cout测试了循环。好像循环只是停留在第一级。
第二次发布在这里,试图查看可能重复的帖子。如果我违反此处的任何规则和规定,我将删除此帖子。
最佳答案
蛮力解决是个很糟糕的主意。您必须使用dynamic programming 方法:从状态n+1
计算下一个状态n
#include <iostream>
#include <map>
using namespace std;
int main()
{
const int N = 8;
std::map<int, long long> W;
for (int k = 1; k < 66; ++k) W[k] = 1;
for (int i = 1; i < N; ++i) {
std::map<int, long long> Q;
for (auto const& w : W) {
for (int k = 1; k < 66; ++k) {
Q[w.first + k] += w.second;
}
}
swap(Q, W);
}
for (auto const& w: W) {
cout << w.first << ": " << w.second << endl;
}
return 0;
}
关于c++ - 嵌套的For循环在循环8次后不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53042702/