文档介绍:该【C++多重循环PPT课件 】是由【非学无以广才】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【C++多重循环PPT课件 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。多重循环
第6课
1
例1:求三位数中的水仙花数。(若abc是水仙花数,则有abc=a3+b3+c3)
例如:153= 13+53+33
分析:采用穷举法,从100-999中搜索, 将每个数的三个数字分解出来, 再计算立方和,最终与原数比较,假如相等,则是符合条件的三位数.
for (m=100;m<=999;m++)
{ a=m/ 100;
b=m % 100 / 10;
c=m % 10;
if (a*a*a+b*b*b+c*c*c==m) cout<< m;
}
2
水仙花数,也可以采用此外一种措施:
对三位数的三个数字进行穷举.
百位数字:1—9
十位数字:0---9
个位数字:0---9
for (a=1;a<=9;a++)
for (b )
for (c )
if (a*a*a+b*b*b+c*c*c= =a*100+b*10+c) cout<<a<<b<<c;
这是一种三重循环,外层循环做一次,内层循环必须所有做完,详细如下:
c=0 (100)
c=1 (101)
b=0 ……
b=1 c=9 (109)
b=2
a=1 b=3
……
b=9
a=2
3
例2:用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻璃纽扣每只1角,小钮扣1分钱3个,编程求出种纽扣各买了多少只?
措施一:for (x=1;x<=100;x++)
for (y=1;y<=100;y++)
for (z=1;z<=100;z++)
if (x+y+z==100 && 50*x+10*y+z/==500) cout<<x<<y<<z;
运算次数:
100*100*100=100万
措施二:for (x=1;x<=10;x++)
for (y=1;y<=50;y++)
{ z=100-x-y;
if (50*x+10*y+z/==500) cout<<x<<y<<z;
}
运算次数:
10*50=500
4
例3:判断素数:素数又叫质数,是指除了1与自身以外没有此外约数的数,其中1既不是素数不是合数,2是自然数中最小的质数。程序规定,输入一种数n,判断n 是不是质数,假如是输出”yes”,假如不是,输出“no”。
cin>>n; k=0;
if (n==1) cout<“no”;
else
{
for (i=2;i<=n-1;i++)
if (n%i= =0) k=1;
if (k==0) cout<<“yes”;
else cout<<“no”;
}
K是标识
范围可优化至int(sqrt(n))
找到一种约数,可以中断目前循环
根据标识的值,从而进行判断
请你根据优化后的方案改写出程序
5
P1119: 求1—N中的素数的个数.(1<=N<=10000)
思绪:s=0; cin>>n;
for(i=2;i<=n;i++)
{
判断i是不是素数,假如是 s=s+1;
}
cout<<s<<endl;
6
P1118、求1—N中的完全数,所谓完全数是指因子和恰好等于自身的数。如28=1+2+4+7+14,故28就是一种完全数。 告诉你的是此范围内的完全数不也许是完全平方数。
输入:N
输出:1-N中的完全数,一行一种数。
数据范围:1<=N<=10000
思绪:
for (i=1;i<=n;i++)
{ 求 i 的因子和,用S寄存;
if (s==i) cout<<i<<endl;
}
S=0;
for (j=1;j<=i/2;j++)
if (i% j==0) s=s+j;
上述做法的运算次数是:N*N 称为时间复杂度
1秒的运算次数=2^25==*10^7(8位数)二重循环10000*10000,因此上面的的算法只能到10000
7
[例3] 编写程序,在屏幕上显示下图形的n行,每行的个数是m,m、n均由键盘输入(m<20,n<30),如:n=4, m=6 时输出如下的图形,第一行前面没有空格。
******
******
******
******
分析:若不考虑图形的错位关系,而直接打印一种矩形的图形,为n行,每行M个,那么n行可用计数循环实现(大循环),每行的个数也可以用计数循环实现(小循环):
cin>>n>>m;
for (i=1;i<=n;i++)
{
for ( j=1;j<=m;j++)
cout<<“*”;
cout<<endl; {每行结束时换行};
}
k=0;用来控制空格的个数
for (j=1;j<=k;j++)
cout<<“ “;
//输出K个空格
K=k+1;
8
[例4] 输出如下的n行(n<20)图形,n由键盘输入。
如:n=6时,输出如下的图形,第一行前没有空格
########### {11个}
######### {9个}
####### {7个}
##### {5个}
### {3个}
# {1个}
分析:用二重循环处理:大循环控制行数,小循环控制每行的个数.
第i行与个数的关系式:
个数=2*i-1
6行
5行
4行
3行
2行
1行
11=6*2-1
9=5*2-1
7=4*2-1
……
1=1*2-1
cin>>n;
for (i=n;i>=1; i--)
{
for (j=1;j<=2*i-1;j++)
cout<<“#”;
cout<<endl;
}
{怎样控制位置}
9
P1123:
1
121
12321
1234321
123454321
**********
1234567654321
123456787654321
12345678987654321
cin>>n;
for ( i=1;i<=n;i++)
{ 控制空格的个数;
前二分之一;
后二分之一;
cout<<endl;
}
分析:采用二重循环,大循环产生N行,小循环产生每一行.
for (j=1;j<=I;j++) cout<<j;
for (j=i-1;j>=1;j--) cout<< j;
10