一、双重循环结构
小A和小B在玩卡牌游戏,每张卡牌上都有一个数,小A手里有3张卡牌,每个卡牌上的数字为1 2 3,小B手里有5张卡牌,分别为5 6 7 8 9,他们想知道每人手里拿出来的第一张卡牌,看看总共有多少种可能性。
【样例输出】
15
这道题,有两个变量,第一个是小A拿出的牌,第二个是小B拿出的牌。他们的可能分别在1 ~ 3,5 ~ 9之间。如果这是一道数学题,那么可以用枚举法解决,C++也可以枚举,对于两个变量的,可以用双重循环解决。
完整代码:
#include <iostream>
using namespace std;
int main() {
int sum = 0;
for (int i = 1; i <= 3; i++) for (int j = 5; j <= 9; j++) sum++;
cout << sum << endl;
return 0;
}
当然,你也可以输出每次的可能。
for (int i = 1; i <= 3; i++) {
for (int j = 5; j <= 9; j++) {
cout << i << " " << endl;
sum++;
}
}
或者,如果牌数不确定,也可以这样:
#include <iostream>
using namespace std;
int main() {
int n, m, sum = 0;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = n + 1; j <= m + n; j++) {
cout << i << " " << endl;
sum++;
}
}
cout << sum << endl;
return 0;
}
二、利用双重循环打印长方形
知道了双重循环后,就可以借助双重循环打印如下的长方体图形:
****
****
****
通过上面的代码和图形,我们可以推断出第一层循环是控制行,第二层循环控制列。
代码如下:
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) cout << "*";
cout << endl;
}
return 0;
}
三、打印直角三角形
&
&&
&&&
&&&&
&&&&&
要打印输出一个直角三角形,通过前面分析,外层循环控制行数,内层循环控制列数,总共是n行。可以先把双重循环结构的框架写出来。
代码如下:
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) cout << "&";
cout << endl;
}
return 0;
}
四、分析
通过前面的分析,处理图形问题基本上可以概括如下方法和步骤:
分析方法:
- 先确定行数
- 再确定列数
- 确定行号和列数之间的关系
打印图形遵循规则: 从上到下、从左到右依次打印输出。
循环控制: 外层循环控制行数,内层循环控制列数。