《算法竞赛入门经典 第2版》第2章课后题题解(一)

习题2-1 水仙花数(daffodil)

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

题解

#include<stdio.h>
int main()
{
    int a,b,c,n;
    for(n = 100;n < 1000;n++){
        a = n / 100;
        b = n % 100 / 10;
        c = n % 10;
        if(n == a * a * a + b * b * b + c * c * c)
            printf("水仙花数 = %d\n",n);
    }
    return 0;
}

运行结果

习题2-2 韩信点兵(hanxin)

题目:相传韩信才智过人,从不会直接清点自己军队的人数,只要让士兵先后三人一排、五人一排、七人一排的变换队形,而他每次只掠一眼排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数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<stdio.h>
int main()
{
    int a,b,c,n,i = 1;
    scanf("%d%d%d",&a,&b,&c);
    for(n = 10;n < 101;n++){
        if(n % 3 == a && n % 5 == b && n % 7==c){
            i = 0;
            break;
        }
    }
    if(i){
        printf("No answer\n");
    }else{
        printf("总人数 = %d\n",n);
    }
    return 0 ;
}

习题2-3 倒三角形(triangle)

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

#########

 #######

  #####

   ###

    #

题解

#include<stdio.h>
int main()
{
    int n,i,k,j;
    scanf("%d",&n);
    if(n > 0 && n <= 20){
       for(i = n;i > 0;i--){
           for(k = n - i;k > 0;k--){
              printf(" ");
            }
            for(j = 0;j < 2 * i - 1;j++){
               printf("#");
            }
            printf("\n");
        }
    }
    return 0;
}

习题2-4 子序列的和(subsequence)

题目:输入两个正整数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<stdio.h>
int main()
{
    int n,m;
    double sum = 0.0;
    scanf("%d%d",&n,&m);
    if(n < m < 1e+6){
        for( ;n <= m;n++){
            sum += (double)((1.0/n)*(1.0/n));
            if(n == 0 && m == 0){
                break;
            }
        }
        printf("%.5f\n",sum);
    }
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值