C Condensing嵌套循环

前端之家收集整理的这篇文章主要介绍了C Condensing嵌套循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这些for循环.
// output all possible combinations
for ( int i1 = 0; i1 <= 2; i1++ )
     {
         for ( int i2 = 0; i2 <= 2; i2++ )
             {
                 for ( int i3 = 0; i3 <= 2; i3++ )
                     {
                         for ( int i4 = 0; i4 <= 2; i4++ )
                             {
                                 for ( int i5 = 0; i5 <= 2; i5++ )
                                     {
                                         for ( int i6 = 0; i6 <= 2; i6++ )
                                             {
                                                 for ( int i7 = 0; i7 <= 2; i7++ )
                                                     {
                                                         //output created words to outFile
                                                         outFile
                                                         << phoneLetters[n[0]][i1]<< phoneLetters[n[1]][i2]
                                                         << phoneLetters[n[2]][i3]<< phoneLetters[n[3]][i4]
                                                         << phoneLetters[n[4]][i5]<< phoneLetters[n[5]][i6]
                                                         << phoneLetters[n[6]][i7]
                                                         << " ";

                                                         if ( ++count % 9 == 0 ) // form rows
                                                             outFile << std::endl;
                                                         }
                                                 }
                                         }
                                 }
                         }
                 }
         }

它看起来很糟糕,但我知道从哪里开始凝聚它们太多了.

有人可以给我一两个指针,这样我可以使这段代码更整洁吗?

解决方法

你在七个级别上索引0,1和2.这可能不是非常有效,但是这个怎么样:
int i1,i2,i3,i4,i5,i6,i7;
int j;

for (int i = 0; i < 2187; i++)
{
    // 0 through 2186 represent all of the ternary numbers from
    //    0000000 (base 3) to 2222222 (base 3).  The following
    //    pulls out the ternary digits and places them into i1
    //    through i7.

    j = i;

    i1 = j / 729;
    j = j - (i1 * 729);

    i2 = j / 243;
    j = j - (i2 * 243);

    i3 = j / 81;
    j = j - (i3 * 81);

    i4 = j / 27;
    j = j - (i4 * 27);

    i5 = j / 9;
    j = j - (i5 * 9);

    i6 = j / 3;
    j = j - (i6 * 3);

    i7 = j;

    // print your stuff
}

或者,根据用户315052在评论中的建议:

int d[7];

for (int i = 0; i < 2187; i++)
{
    int num = i;
    for (int j = 6; j >= 0; j--)
    {
        d[j] = num % 3;
        num = num / 3;
    }

    // print your stuff using d[0] ... d[6]]
}

猜你在找的C&C++相关文章