当我像这样四次嵌套循环时,

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/

10-14 15:14
查看更多