【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;
}