2.5习题与注解

来源:互联网 发布:暴雪 泰坦计划 知乎 编辑:程序博客网 时间:2024/06/01 08:34
<span style="font-size:18px;">2-1 水仙花数</span>

输出100-999中的所有水仙花数。若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。例如153=1^3+5^3+3^3,所以153是水仙花数。

#include<cstdio>#include<cstdlib>//3位数的3次幂才构成水仙花数int main(){    int n;    for(int a=1;a<=9;a++)        for(int b=0;b<=9;b++)            for(int c=0;c<=9;c++)            {                n=a*100+b*10+c;                if(n==a*a*a+b*b*b+c*c*c)                    printf("%d\n",n);            }    return 0;}

 

#include<cstdio>#include<cstdlib>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)            printf("%d ",i);    }    return 0;}//结果:153 370 371 407


 

2-2韩信点兵

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

样例输入:

2 1 3

2 1 6

样例输出:

case1 :No answer

case2:41

 

#include<cstdio>#include<cstdlib>//输出最小的可能的值int count[100];int main(){    int a,b,c;    scanf("%d %d %d",&a,&b,&c);    bool find=false;    for(int i=10;i<=100;i++)    {        if(i%3==a&&i%5==b&&i%7==c)        {            find=true;            printf("%d",i);            break;        }    }    if(find==false)        printf("no answer");    return 0;}


2-3倒三角形

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

#########

 #######

   #####

    ###

     #

#include<cstdio>#include<cstdlib>int main(){    int n;    scanf("%d",&n);    int num=2*n-1;    for(int a=0;a<n;a++)    {        for(int b=0;b<a;b++)            printf(" ");        for(int c=0;c<num;c++)            printf("#");        printf("\n");        num-=2;    }    return 0;}

 

正三角形:

n=5时,输出如下所示:

         #

       ###

     #####

   #######

 #########

#include<cstdio>#include<cstdlib>int main(){    int n;    scanf("%d",&n);    for(int a=0;a<n;a++)    {        for(int b=a;b<n-1;b++)            printf(" ");        for(int c=0;c<2*a+1;c++)            printf("#");        printf("\n");    }    return 0;}

 

2-4子序列的和

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

样例输入:

2 4

65536 655360

0 0

样例输出:

case 1:0.42361

case 2:0.00001

#include<cstdio>#include<cstdlib>int main(){    double n, m;    double i, sum = 0.0;    scanf("%lf%lf", &n, &m);    for (i = n; i <= m; i++) {        sum += 1.0/(i*i);    }    printf("%.5lf\n", sum);    return 0;}


 

 

2-5分数化小数

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

样例输入:

1 6 4

0 0 0

样例输出:

case1 :0.1667

#include<cstdio>#include<cstdlib>int main(){    int a,b,c;    scanf("%d %d %d",&a,&b,&c);    printf("%.*f",c,a*1.0/b);//格式化输出:可变宽度参数,*定义输出的位数    return 0;}


 

2-6排列

用1,2,3,...,9组成3个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.按照"abc def ghi"的格式输出所有解,每行一个解。提示:不必太动脑筋。

#include<cstdio>#include<cstdlib>int vis[10];//该数组保存1,2,3....9出现的次数int main(){    int x,y,z;    bool solved=false;    for(int a=1;a<=9;a++)    {         for(int b=1;b<=9;b++)            if(a!=b)            {                for(int c=1;c<=9;c++)                    if(a!=c&&b!=c)                        {                            x=a*100+b*10+c;                            y=2*x;                            z=3*x;                            int d=y/100;                            int e=y/10%10;                            int f=y%10;                            int g=z/100;                            int h=z/10%10;                            int i=z%10;                            for(int i=1;i<=9;i++) vis[i]=0;                            vis[a]++;vis[b]++;vis[c]++;                            vis[d]++;vis[e]++;vis[f]++;                            vis[g]++;vis[h]++;vis[i]++;                            bool judge=true;                            for(int i=1;i<=9;i++)                            {                                if(vis[i]!=1)//若出现的次数不等于1 ,则不符合题意                                {                                    judge=false;                                    break;                                }                            }                            if(judge)                            {                                printf("%d %d %d\n",x,y,z);                                solved=true;                            }                        }            }    }    if(!solved)        printf("no answer");    return 0;}/*结果192 384 576219 438 657273 546 819327 654 981*/


 


#include<cstdio>#include<cstdlib>int main(){    double n, m;    double i, sum = 0.0;    scanf("%lf%lf", &n, &m);    for (i = n; i <= m; i++) {        sum += 1.0/(i*i);    }    printf("%.5lf\n", sum);    return 0;}//当n,m为int型时,输入数据65536 655360 结果为1.#INF0  可能的原因是出0溢出或者数据溢出。为什么!?


 


#include<cstdio>#include<cstdlib>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)            printf("%d ",i);    }    return 0;}//结果:153 370 371 407


 

 

0 0
原创粉丝点击