砝码组合

不要让你的执行频次超过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; 
}
原文地址:https://www.cnblogs.com/wizarderror/p/10645397.html