天平称重
问题描述:
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1
要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。
解题思路:
用 -1、0、1 来表示五个砝码是否使用,是放在天平左端还是右端。直接暴力求解。
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,c,d,e;
int num,x;
while(scanf("%d",&x)!=EOF)
{
for(a=-1;a<=1;a++)
for(b=-1;b<=1;b++)
for(c=-1;c<=1;c++)
for(d=-1;d<=1;d++)
for(e=-1;e<=1;e++)
{
if(x==81*a+27*b+9*c+3*d+1*e)
{
if(a==1)
{
printf("81");
if(b==-1)
printf("-27");
if(b==1)
printf("+27");
if(c==-1)
printf("-9");
if(c==1)
printf("+9");
if(d==-1)
printf("-3");
if(d==1)
printf("+3");
if(e==-1)
printf("-1");
if(e==1)
printf("+1");
}
if(a==0&&b==1)
{
printf("27");
if(c==-1)
printf("-9");
if(c==1)
printf("+9");
if(d==-1)
printf("-3");
if(d==1)
printf("+3");
if(e==-1)
printf("-1");
if(e==1)
printf("+1");
}
if(a==0&&b==0&&c==1)
{
printf("9");
if(d==-1)
printf("-3");
if(d==1)
printf("+3");
if(e==-1)
printf("-1");
if(e==1)
printf("+1");
}
if(a==0&&b==0&&c==0&&d==1)
{
printf("3");
if(e==-1)
printf("-1");
if(e==1)
printf("+1");
}
if(a==0&&b==0&&c==0&&d==0&&e==1)
{
printf("1");
}
printf("\n");
}
}
}
return 0;
}