枚举中的嵌套循环
乘法口诀表
题目描述
输出九九乘法口诀表
分析
一共有9行,第 i 行一共有 i 列,枚举第 i 行、第 j 列的表达式
关键代码
for (int i = 1; i <= 9; i ++) {
for (int j = 1; j <= i; j ++) {
printf("%d*%d=%d ", j, i, i*j);
}
printf("\n");
}
输出观察
USACO_2019_12_Bronze_T1_Cow Gymnastics
题目描述
检查奶牛A和B在训练后的排名是否发生了变化
分析
枚举所有的奶牛对 (i,j),利用函数f(i,j)检查这对奶牛的排名变化
关键代码
cin >> n;
for (int i = 1; i <= n; i ++) {
for (int j = i + 1; j <= n; j ++) {
printf("(%d,%d) ", i, j);
}
printf("\n");
}
输出观察
USACO_2020_12_Bronze_T2_Daisy Chains
题目描述
作为一名崭露头角的摄影家,Bessie 决定给这些花拍些照片。具体地说,对于每一对满足 1≤i≤j≤N 的花 (i,j),Bessie 会给从花 i 到花 j 之间的所有花(包括 i 和 j)拍一张照。
分析
照片(i,j)拍摄从第 i 朵到第 j 朵花,枚举所有的照片,然后检查照片中是否有平均花
关键代码
cin >> n;
for (int i = 1; i <= n; i ++) {
for (int j = i; j <= n; j ++) {
printf("(%d,%d) ", i, j);
}
printf("\n");
}
输出观察
2020上海小学组 T5
题目描述
在一个英国古建筑的墙面上有很多个单词,有些单词看上去很舒服,有些看上去不舒服。如果一个单词满足以下两个条件,我们称这个单词是不舒服的:
1、 单词长度至少是 2
2、 超过一半的字母是相同的
分析
枚举所有长度大于等于2的子串
关键代码
string s;
cin >> s;
int len = s.size();
for (int i = 0; i < len; i ++) {
for (int j = i + 1; j < len; j ++ ) {
cout << s.substr(i, j-i+1) << ' ';
}
cout << endl;
}