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

习题2-5 分数化小数(decimal)

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

样例输入:

1 6 4

0 0 0

样例输出:

case 1: 0.1667

题解

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a <= 1e+6 && b <= 1e+6 && c <= 100 && a != 0 && b != 0 && c != 0){
        printf("%.*lf\n",c,(double)a / (double)b);
    }
    return 0;
}

习题2-6 排列(permutation)

题目:用1,2,3,4,。。。9组成3个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。

题解

#include<stdio.h>
int main()
{
    int i,j,flag;
    //定义存放三个数的数组
    int a[3];
    int array[10];
    for(i = 123;i <= 329;i++){
        a[0] = i;
        a[1] = i * 2;
        a[2] = i * 3;
        //使10个数组中每个数组的数值都为0
        for(j = 0;j < 10;j++){
            array[j] = 0;
        }
        int x = 1;
        //确保每个数字恰好使用一次
        for(flag = 0;flag < 3 && x == 1;flag++){
            //百位
            if(array[a[flag]/100] == 0 && (a[flag]/100) != 0){
                 array[a[flag]/100] = 1;
            }else{
                x = 0;
            }
            //十位
            if(array[a[flag] / 10 % 10] == 0  && (a[flag] / 10 % 10 ) != 0){
                array[a[flag] / 10 % 10] = 1;
            }else{
                x = 0;
            }
            //个位
            if(array[a[flag]%10] == 0 && (a[flag]%10) !=  0 ){
                 array[a[flag]%10] = 1;
            }else{
                 x = 0;
            }
         }
         if(x == 1){
            printf("abc:def:ghi = %d:%d:%d\n",a[0],a[1],a[2]);
         }
    }
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值