11.6C语言学习记录(3)

给定两个均不超过9的正整数a和n,要求编写程序求a + aa + aaa++⋯ + aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
输入样例:
2 3
输出样例:
s = 246

#include<stdio.h>
#include<math.h>
int main() {
    int a = 0, n = 0, i = 0;
    double item = 0;
    double sum = 0;
    scanf("%d %d", &a, &n);

    for (i = 0;i <= n - 1;i++) {
        item += a*pow(10, i);
        sum += item;

    }

    printf("s = %.0lf", sum);
    return 0;
}

//将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
//输入格式 :
//输入在一行中给出待换的零钱数额x∈(8, 100)。
//输出格式 :
//要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。
//每行输出一种换法,格式为:“fen5:5分硬币数量, fen2 : 2分硬币数量, fen1 : 1分硬币数量, total : 硬币总数量”。
//最后一行输出“count = 换法个数”。
//输入样例 :
//13
//输出样例 :
//    fen5 : 2, fen2 : 1, fen1 : 1, total : 4
//    fen5 : 1, fen2 : 3, fen1 : 2, total : 6
//    fen5 : 1, fen2 : 2, fen1 : 4, total : 7
//    fen5 : 1, fen2 : 1, fen1 : 6, total : 8
//    count = 4

使用贪心算法,从最优解(数量最少的)开始算起

#include<stdio.h>
int main() {
    int i5 = 0, i2 = 0, i1 = 0;
    int limit5 = 0, limit2 = 0, limit1 = 0;
    int count = 0, total = 0;
    int sum = 0;
    scanf("%d", &sum);

    limit5 = sum / 5;
    limit2 = sum / 2;
    limit1 = sum / 1;
    for (i5 = limit5;i5 > 0;i5--) {
        for (i2 = limit2;i2 > 0;i2--) {
            for (i1 = limit1;i1 > 0;i1--) {
                if (5 * i5 + 2 * i2 + 1 * i1 == sum) {
                    count++;
                    total = i5 + i2 + i1;
                    printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", i5, i2, i1, total);
                }
            }
        }
    }
    printf("count = %d", count);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值