天平称重

问题描述:

用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有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;
 }