蓝桥杯——天平称重

                                            天平称重

问题描述:

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

用户输入:

5

程序输出:

9-3-1


用户输入:

19


程序输出:

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

思路:

      直接暴力,情况也不多。每个砝码都有三种状态,放左盘/放右盘/不放。多重循环把每种情况都跑一遍。

      输出的时候注意一下格式就行了。

代码:

#include<stdio.h>
#include<string.h>
int main()
{
	int a[3]={0,-81,81};
	int b[3]={0,-27,27};
	int c[3]={0,-9,9};
	int d[3]={0,-3,3};
	int e[3]={0,-1,1};
	int book[5];
	int i,j,k,n,p,q,flag; 
	while(scanf("%d",&n)!=EOF)
	{
		memset(book,0,sizeof(book));
		for(i=0;i<3;i++)
			for(j=0;j<3;j++)
				for(k=0;k<3;k++)
					for(p=0;p<3;p++)
						for(q=0;q<3;q++)
						{
							if(a[i]+b[j]+c[k]+d[p]+e[q]==n)
							{
								book[0]=a[i];
								book[1]=b[j];
								book[2]=c[k];
								book[3]=d[p];
								book[4]=e[q];
								break;
							}
						}
		flag=0;
		for(i=0;i<5;i++)
		{
			if(flag==0&&book[i]>0)
			{
				flag=1;
				printf("%d",book[i]);
			}
			else if(book[i]>0)
				printf("+%d",book[i]);
			else if(book[i]<0)
				printf("%d",book[i]);
		}
		printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wan_ide/article/details/88694049