算法2.5.1习题

2.1水仙花数

输出100~999中的所有水仙花数。若3位数ABC满足ABC = A^3+B^3+C^3,则称其为水仙花数。

#include <iostream>

using namespace std;
int main(){
    for(int j = 1;j<=9;j++){
        for(int k = 0;k<=9;k++){
            for(int l = 0;l<=9;l++){
                int n = j*j*j+k*k*k+l*l*l;
                if(n==100*j+10*k+l) cout<<n<<endl;
            }
        }
    }
}

2.2韩信点兵

相传韩信才智过人,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只略一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值或报告无解。已知总人数不小于10,不超过100.。

样例输入:

2 1 6

2 1 3

样例输出:

Case 1: 41
Case 2: No answer

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    int a,b,c;
    int i = 0;
    while(cin>>a>>b>>c){
        int res = 1;
        for(int j = 10;j<=100;j++){
            if(j%3==a and j%5==b and j%7==c){
                printf("Case %d: %d\n",++i,j);
                res = 0;
                break;
            }
        }
        if(res) printf("Case %d: No answer\n",++i);
    }
}

2-3 倒三角形

输入正整数n<=20,输出一个n层的倒三角形。例如,n=5时输出如下

 

 

#include <iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a= 2*n-1;
    for(int i = 0 ; i < n ;i++){
        int m = i;
        for(int m = 0 ; m<i;m++) cout<<" ";
        for(int m = 0 ; m<a-2*i;m++) cout<<"#";
        for(int m = 0 ; m<i;m++) cout<<" ";
        cout<<endl;
    }
}

2-4 子序列的和

输入两个正整数n<m<10^6,输出,保留5位小数。输入包含多组数组,结束标记为 n = m = 0。提示:本题有陷阱

#include <iostream>
#include <cstdio>

using namespace std;
int main(){
    int n,m,s = 0;
    while(cin>>n>>m,n!=0 and m!=0){
        double sum = 0;
        for(int i = n ; i <=m;i++){
            sum+=(double)1/i/i;
        }
        printf("Case %d: %.5lf\n",++s,sum);
    }
}

2-5 分数化小数

输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=1000000,c<=100。输入包含多组数据,结束标记为a = b= c = 0.

 

posted @ 2021-11-06 14:34  乐池  阅读(52)  评论(0)    收藏  举报