第十课 循环综合应用
目 标
01、理解循环嵌套的含义。
02、熟练应用循环语句及其嵌套解决一些实际问题。
循环结构的嵌套
执行过程(以两重循环为例) :
先执行第一重 for 语句,再执行循环体内的 for 语句,外循环 for 执行 1 次,内循环 for 全部执行完。
循环结构的嵌套
循环结构与分支结构的嵌套类似,也可以在一个循环语句的循环体里出现另一个循环语句,不管是 while 语句、do-while 语句还是 for 语句。这样的循环结构称为“循环嵌套”。
例1、输出矩形
【问题描述】
输入 n 和 m,输出一个 n 行 m 列的“*”矩形图案。
【输入格式】
一行两个正整数 n 和 m,中间用一个空格隔开,1≤n、m≤100。
【输出格式】
输出一个 n 行 m 列的“*”矩形图案。
【样例输入】
3 4
【样例输出】
****
****
****
#include
using namespace std;
int main(){
int n,m;
scanf ("%d %d",&n,&m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++) printf( “ * ” );
printf( “ \n ” );
}
return 0;
}
【问题分析】
要输出 n 行,所以可以编写一个外层循环,穷举行。然后,在循环体里,还要输出 m 个“*”,所以再嵌套一个内层循环,穷举每一行的“*”个数。
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
例2、数字三角形
【问题描述】
输入一个正整数 n,输出 n 行的数字三角形。其中,第 1 行为数字 1,第 2 行为数字 23,第 3行为数字 456,第 4 行为数字 7890,第 5 行为数字 12345,…
【输入格式】
一行一个正整数 n,1≤n≤100。
【输出格式】
n 行的数字三角形。
【样例输入】
4
【样例输出】
1
23
456
7890
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
参考代码
#include
using namespace std;
int main(){
int n,t = 1;
scanf ("%d",&n);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
printf( “ %d ” ,t % 10);
t++;
}
printf( “ \n ” );
}
return 0;}
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
例3、与 7 无关的数
【问题描述】
一个正整数,如果它能被 7 整除,或者它的某一位上的数字为 7,则称其为“与 7 相关”的数。
现在,请编程求出所有小于或等于 n 的“与 7 无关”的正整数个数。
【输入格式】
一行一个正整数 n,n≤10^6。
【输出格式】
一行一个整数,表示答案。
【样例输入】
21
【样例输出】
17
代码如下:
#include
using namespace std;
int main(){
int n,ans = 0;
cin >> n;
for(int i = 1; i <= n; i++){
int flag1 = 1, flag2 = 1;
if(i % 7 == 0) flag1 = 0;
int x = i;
while(x && flag2){
if(x % 10 == 7) flag2 = 0;
x = x / 10;
}
if(flag1 && flag2) ans++;
}
cout << ans << endl;
return 0;
}
例4.求 S=1!+2!+3!+....+10!
例5.求 100-999 中的水仙花数。若三位数 ABC,ABC=A3+B3+C3,则称 ABC 为水仙花数。
例如 153,13+53+33=1+125+27=153,则 153 是水仙花数。
问题分析。
根据题意,采用三重循环来求解。
算法设计:由于循环次数一定,用 for 循环最为简单
说明:同时也可以采用一个 for 循环来求解,表面上看好像优于三重循环,
实际上却比上面的程序效率低,请同学们自己分析。
例6.鸡公每只5文钱,鸡婆每只3文钱,鸡仔三只一文钱,今用100文钱买100只鸡。问鸡公、鸡婆、鸡仔各几只?
问题分析:设鸡公为 x 只,鸡婆为 y 只,鸡仔为 z 只。依题意可列出:
x+y+z=100
5x+3y+z/3=100
这个方程组有三个未知数,却只有两个方程,解不唯一。这类方程是不定方程。
算法设计:
穷举法,根据题意可知:x 的值最大不超过 20,y 的值最大不超过 33,z 的值最大不超过 99,且增量为 3。
例7.输出 100—200 中所有的素数。
问题分析:
我们可对 100-200 之间的每一个整数进行判断,若它是为素数,则输出。而对于任意整数 i,根据素数定义,我们从 2 开始,到 i-1,找 i 的第一个约数,若找到第一个约数,则 i 必然不是素数。