【5个砝码】
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1
要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。
三进制
#include<iostream>
#include<cmath>
using namespace std;
int x=0,k=1;
int a[10],b[10];
void d(int n){//对应的三进制数
if(n){
d(n/3);
a[k++]=n%3;
}
return ;
}
int main(){
int n;
cin>>n;
d(n);
for(int i=k-1;i>=1;i--){//三进制的每位无非是0 1 2 0直接跳过 1 输出3^i 2由于没有这个砝码就将高位加一 输出-3^i;
if(a[i]==2) {
a[i]=-1;
a[i-1]+=1;
}
}
int m=0;
while(a[m]==0) m++;
if(a[m]==1) cout<<pow(3,k-1);
for(int i=m+1;i<k;i++){
if(a[i]==1) cout<<"+";
else if(a[i]==-1) cout<<"-";
if(a[i]!=0)
cout<<pow(3,k-i-1);
}
return 0;
}