循环嵌套¶
循环嵌套¶
循环结构互相嵌套,形成多重循环的结构
打印图形¶
数字三角形
靠右的数字三角形
靠右的字符三角形
字符对称三角形
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) cout << ' ';
for (int j = 1; j <= 2 * i - 1; j++)
cout << char(abs(j - i) + 'A');
cout << endl;
}
打印排列组合¶
[1, n]
范围选择 3 个数字进行排列,数字可以重复使用,按字典序输出
[1, n]
范围选择 3 个数字进行排列,数字不可以重复使用,按字典序输出
[1, n]
范围选择 3 个数字进行组合,数字可以重复使用,按字典序输出
对于数列123,排列的方案包括123、132、213、231、312、321,共6种
但都被视为同一种组合
[1, n]
范围选择 3 个数字进行组合,数字不可以重复使用,按字典序输出
循环嵌套优化¶
1092:求出e的值¶
两层循环
for (int i = 1; i <= n; i++) {
long long t = 1;
for (int j = 1; j <= i; j++) t *= j; // 求i! n!
cout << t << endl;
}
一层循环
2028:【例4.14】百钱买百鸡¶
三层循环
for (int i = 0; i <= 100 / 5; i++)
for (int j = 0; j <= 100 / 3; j++)
for (int k = 0; k <= 300; k += 3)
if (i*5 + j*3 + k/3 == 100 && i+j+k == 100)
printf("%d %d %d\n", i, j, k);
两层循环
for (int i = 0; i <= 100 / 5; i++)
for (int j = 0; j <= 100 / 3; j++) {
int k = 100 - i - j;
if (i*5 + j*3 + k/3 == 100 && k % 3 == 0) printf("%d %d %d\n", i, j, k);
}
2068:【例2.6】鸡兔同笼¶
两层循环枚举
for (int i = 0; i <= x; i++)
for (int j = 0; j <= min(x, y / 4); j++)
if (i + j == x && 2 * i + 4 * j == y)
cout << i << ' ' << j << endl;
一层循环枚举
for (int i = 0; i <= x; i++) {
int j = x - i;
if (2 * i + 4 * j == y) cout << i << ' ' << j << endl;
}
数学公式