fra*_*nkV 6 c++ refactoring for-loop
我有这些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;
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来很糟糕,但我知道从哪里开始凝聚它们太多了.
有人可以给我一两个指针,这样我可以使这段代码更整洁吗?
你在七个级别上索引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
}
Run Code Online (Sandbox Code Playgroud)
或者,根据用户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]]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |