砝码组合
不要让你的执行频次超过10的九次方
66.砝码组合 (15分) C时间限制:3000 毫秒 | C内存限制:3000 Kb 题目内容: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码,重量分别是1,3,9,27,81。 则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。 本题目要求编程实现:对用户输入的重量(1~121), 给出砝码组合方案(用加减式表示,减代表砝码放在物品盘)。 例如: 输入: 5 输出: 9-3-1 输入: 19 输出: 27-9+1 要求程序输出的组合总是大数在前小数在后。 输入描述 用户输入的重量(1~121), 输出描述 给出砝码组合方案(用加减式表示,减代表砝码放在物品盘)。
代码如下:
#include <stdio.h> #include <math.h> void solve(int *num, int x) { printf("%d", x); if (*num==1) return; else if (*num>0){ if (*num<x) printf("-"); else if(*num>x) printf("+"); *num = *num-x; } else if (*num<0){ if (*num<-x) printf("-"); else if(*num>-x) printf("+"); *num = *num+x; } } int main() { int num; scanf("%d", &num); while (num!=0) { int x = abs(num); if (x==1) solve(&num, 1); else if (1<x&&x<5) solve(&num, 3); else if (4<x&&x<14) solve(&num, 9) else if (13<x&&x<41) solve(&num, 27); else if(40<x&&x<121) solve(&num, 81); } return 0; }