day10:嵌套循环

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;
}