给定两个均不超过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;
}