砝码称重
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");
}
}
*/
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");
}
}
*/
相关文章推荐
- 砝码称重
- 砝码称重问题求解---动态规划与母函数方法
- wikioi-天梯-提高一等-哈希表-2144:砝码称重2
- 蓝桥杯 砝码称重
- 砝码称重
- 【OJ8756】砝码称重V2,可达性多重背包
- 砝码称重
- 51nod 1449 砝码称重 (进制思想)
- CodeForces 砝码称重
- 1449 砝码称重
- 洛谷P1441 砝码称重 bitset状压
- f013: 砝码称重 (多重背包化01背包) + 南理工:砝码称重(贪心)
- 砝码称重 2
- 砝码称重的问题
- Codevs_P2144 砝码称重 2
- 51node-1449 砝码称重(进制思想)
- 51nod 1449 砝码称重
- 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
- 51Nod 砝码称重
- 砝码称重