1.10 嵌套循环
1.10 嵌套循环
1. 直角三角形
【例】对于给定的自然数n(n<20),在屏幕上输出仅由“*”构成的n行的直角三角形
例如,当n=4的时候,输出:
*
**
***
****
#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
for(int i=1; i<=n; i++){ //外层循环控制行
for(int j=1; j<=n; j++){//内层循环控制列
if(i>=j) cout<<"*";
} cout<<endl;
}
return 0;
}
2. 倒三角形
【例】对于给定的自然数n(n<20),要求你输出如下图形
当n=4的时候,输出:
*
**
***
****
***
**
*
当n=3的时候,输出:
*
**
***
**
*
#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
for(int i=1; i<=n; i++){//行
for(int j=1; j<=n; j++){//列
if(i>=j) cout<<"*";
} cout<<endl;
}
for(int i=n-1; i>=1; i--){ //行
for(int j=1; j<=i; j++){//列
cout<<"*";
}cout<<endl;
}
return 0;
}
3. 百钱买百鸡问题
【例】百钱买百鸡
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
#include<iostream>
using namespace std;
int main(){
for(int a=0; a<=20; a++){
for(int b=0; b<=33; b++){
for(int c=0; c<=100; c+=3){// c 一定是 3的倍数,所以 c%3==0
if(5*a+3*b+c/3==100 && a+b+c==100 && c%3==0){
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
return 0;
}
4. 水仙花数
【例】编程求出所有的水仙花数
水仙花数就是一类特殊的三位数,它的每一个数位上的数字的立方和恰好等于这个三位数本身。
例如,153=1+125+27=153 所以153是水仙花数
方法一:我们可以循环产生所有的三位数,然后分别判断,它是不是水仙花数
方法二:我们知道10的三次方就是四位数了,我们可以分别枚举第一位,第二位和第三位。
#include<iostream>
using namespace std;
int main(){
for(int i=100; i<=999; i++){
int a = i/100;
int b = i/10%10;
int c = i%10;
if(a*a*a+b*b*b+c*c*c==i) cout<<i<<" ";
}
cout<<endl;
for(int a=1; a<=9; a++){
for(int b=0; b<=9; b++){
for(int c=0; c<=9; c++){
int num = a*100+b*10+c;
if(a*a*a+b*b*b+c*c*c==num) cout<<num<<" ";
}
}
}
return 0;
}
5. 质数
【例】对于给定的自然数n,输出1~n之间的全部质数
解析:要输出1~n之间的全部质数,就要判断每一个数是否为质数。
质数:只能被1和它本身整除的数。
#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
for(int i=1; i<=n; i++){
bool flag=1;//假设 i都是质数
for(int j=2; j<i; j++){
if(i%j==0) {//如果发现 i还有因数 j,则不是质数
flag=0;break;
}
}
if(flag && i>1) cout<<i<<" ";
}
return 0;
}
6. 分解质因数
【例】把一个合数分解成若干个质因数乘积的形式叫做分解质因数。
输入一个正整数n,将n分解成质因数乘积的形式。
例如,输入36, 输出则为 36=2*2*3*3
#include<iostream>
using namespace std;
int main(){
int n; cin>>n; cout<<n<<"=";
for(int i=2; i<=n; i++){
bool flag=1;//假设 i都是质数
for(int j=2; j<i; j++){
if(i%j==0){//确认 i不是质数
flag=0; break;
}
}
while(flag && n%i==0){//满足条件就一直执行
if(n!=i) cout<<i<<"*";
else cout<<i;
n /= i;
}
}
return 0;
}