蓝桥杯 砝码称重


5个砝码
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1

要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。





#include <iostream>
using namespace std;
int der[3]= {-1,0,1},A[5]= {81,27,9,3,1};
void cal(int n)
{
    int sum=0;
    for(int i1=0; i1<3; i1++)
        for(int i2=0; i2<3; i2++)
            for(int i3=0; i3<3; i3++)
                for(int i4=0; i4<3; i4++)
                    for(int i5=0; i5<3; i5++)
                    {
                        if(der[i1]*A[0]+der[i2]*A[1]+der[i3]*A[2]+der[i4]*A[3]+der[i5]*A[4]==n)
                        {
                            int result[5];
                            result[0]=der[i1]*A[0];
                            result[1]=der[i2]*A[1];
                            result[2]=der[i3]*A[2];
                            result[3]=der[i4]*A[3];
                            result[4]=der[i5]*A[4];
                            int i,t;
                            for(i=0; i<5; i++)
                                if(result[i]!=0)
                                {
                                    t=i;
                                    break;
                                }
                            cout<<result[t];
                            for(t=t+1; t<5; t++)
                                if(result[t]!=0)
                                {
                                    if(result[t]>0)
                                        cout<<"+"<<result[t];
                                    else
                                        cout<<result[t];
                                }
                            cout<<endl;
                            return;
                        }
                    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        cal(n);
    }
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值