您的位置:首页 > 其它

砝码称重

2013-05-15 19:41 197 查看
/*

5个砝码

用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。

如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。

本题目要求编程实现:对用户给定的重量,给出砝码组合方案。

例如:

用户输入:

5

程序输出:

9-3-1

用户输入:

19

程序输出:

27-9+1

要求程序输出的组合总是大数在前小数在后。

可以假设用户的输入的数字符合范围1~121。

*/

#include<iostream.h>

void main()

{

int x;

cin>>x;

int y[5];

int e[]={0,1,-1};

int d[]={0,3,-3};

int c[]={0,9,-9};

int b[]={0,27,-27};

int a[]={0,81,-81};

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

for(int k=0;k<3;k++)

for(int m=0;m<3;m++)

for(int n=0;n<3;n++)

if(a[i]+b[j]+c[k]+d[m]+e
==x)

{

// cout<<a[i]<<b[j]<<c[k]<<d[m]<<e
<<endl;

y[0]=a[i];

y[1]=b[j];

y[2]=c[k];

y[3]=d[m];

y[4]=e
;

}

for(i=0;i<5;i++)

{

if(y[i]!=0)

{

cout<<y[i];

for(int j=i+1;j<5;j++)

{

if(y[j]>0)

cout<<"+"<<y[j];

else if(y[j]<0) cout<<y[j];

}

break;

}

}

}

/*

#include<stdio.h>

void main()

{

int len=0,a[10]={0},j;

char op[10];

int t,k,m,input,i;

for(j=1;j<100;j++)

{

input=j;

m=j;

len=0;

t=1;

while(input)

{

k=input%3;

input/=3;

//关键是这里的两步

switch(k)

{

case 0:break;

case 1:

a[len]=t;

op[len++]='+';

break;

case 2:

a[len]=t;

op[len++]='-';

input++;

break;

}

t*=3;

}

printf("%d=%d",m,a[len-1]);

for(i=len-2;i>=0;i--)

printf("%c%d",op[i],a[i]);

printf("\n");

}

}

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: