算法竞赛入门经典(第二版)第二章课后习题

习题2-1 水仙花数

#include<stdio.h>

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\n",i);

        }

    }

    return0;

}


习题2-2 韩信点兵

#include<stdio.h>

int main(){

    int a,b,c;

    int num=0;

    while (scanf("%d %d %d",&a,&b,&c)==3) {

        int flag=0;

        num++;

        for (int i=10; i<=100; i++) {

            if (i%3==a&&i%5==b&&i%7==c) {

                flag=1;

                printf("Case %d: %d\n",num,i);

                break;

            }

        }

        if (!flag) {

            printf("Case %d: No answer\n",num);

        }

    }

    return0;

}


习题2-3 倒三角形

#include<stdio.h>

int main(){

    int n;

    int space=0;

    scanf("%d",&n);

    for (int i=n; i>0; i--) {

        for (int j=0; j<space; j++) {

            printf(" ");

        }

        for (int j=1; j<=2*i-1; j++) {

            printf("#");

        }

        space++;

        printf("\n");

    }

    return0;

}


习题2-4 子序列的和

#include<stdio.h>

int main(){

    int n,m;

    int num=0;

    while (scanf("%d%d",&n,&m)==2) {

        double sum=0;

        if (n>m) {

            continue;

        }

        elseif(n==0&&m==0){

            break;

        }

        else{

            for (int i=n; i<=m; i++) {

                sum+=1.0/i/i;//如果用1.0/(i*i)会溢出

            }

            num++;

            printf("Case %d: %.5f\n",num,sum);

        }

    }    return0;

}


//习题2-5 分数化小数

#include<stdio.h>

int main(){

    int a,b,c;

    int num=0;

    while (scanf("%d%d%d",&a,&b,&c)==3) {

        if (a==0&&b==0&&c==0) {

            break;

        }

        elseif(a>0&&b>0&&c>0&&a<=1e6&&b<=1e6&&c<=100){

            num++;

            printf("Case %d: %.*f\n",num,c,1.0*a/b);

        }else{

            continue;

        }

    }

    return0;

}


//习题2-6 排列

#include<stdio.h>

void Swap(int *a,int *b){

    int t=*a;

    *a=*b;

    *b=t;

}

void Perm(int List[],int k,int m){

    if (k==m) {

        int abc=List[0]*100+List[1]*10+List[2];

        int def=List[3]*100+List[4]*10+List[5];

        int ghi=List[6]*100+List[7]*10+List[8];

        if (abc*2==def&&def*3==ghi*2) {

            printf("%d %d %d\n",abc,def,ghi);

        }

    }

    else{

        for (int i=k; i<=m; i++) {

            Swap(&List[k],&List[i]);

            Perm(List, k+1, m);

            Swap(&List[k],&List[i]);

        }

    }

}

int main(){

    int List[10]={1,2,3,4,5,6,7,8,9};

    Perm(List,0, 8);

    return0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值