五個砝碼

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章