砝碼組合問題用c語言實現

2021-06-29 12:03:20 字數 1120 閱讀 2594

5個砝碼

用天平稱重時,我們希望用盡可能少的砝碼組合稱出盡可能多的重量。

如果只有5個砝碼,重量分別是1,3,9,27,81。則它們可以組合稱出1到121之間任意整數重量(砝碼允許放在左右兩個盤中)。

本題目要求程式設計實現:對使用者給定的重量,給出砝碼組合方案。

例如:使用者輸入:

5程式輸出:

9-3-1

使用者輸入:

19程式輸出:

27-9+1

要求程式輸出的組合總是大數在前小數在後。

可以假設使用者的輸入的數字符合範圍1~121。

解:

這個問題有很多網友用動態規劃來做,這裡我提供一種不同的思路,如果有錯誤之處,請大俠們莫噴。

這個問題有乙個巧合,那就是每個砝碼都是3的多少次方,所以我下面的解題思路是利用3進製來做;

我們可以用19來舉個例子:

首先19用三進製表現出來是0201,這時,我們不動其中的0和1,我們把2變為-1,然後進一位,得出的結果是 1-101,

然後我們就用三進製把這個數求出來,即:1*3^3-1*3^2+1=27-9+1

所以正確答案是:27-9+1

當然這只是乙個巧合,因為3^2就等於3^3-3^2即18=27-9;

這可以推廣到3的n次方上去,但是這個題若是換成4的多少次方來做就得用動態規劃了。

#include

int p(int i)

return count;

}int main()

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

else if(a[i]==2)

n=n/3;

if(n==0)

break;

}if(a[i+1]==1)

printf("%d",p(i+1));

for(j=i;j>-1;j--)

return 0;

}

用C 語言實現八皇后問題

一 問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。二 整體設計思路 1.用web控制項table實現棋盤的布局 table控制項在後台用 生成,多...

八皇后問題(用c語言實現)

八皇后問題 輸入 乙個數字n,表示在n n的 上,合理的擺放n個皇后。輸出 輸出n個皇后所能擺放的全部可能性,0 該位置不擺放皇后,1 在該位置擺放皇后。樣例輸入 1 no answer 2 no answer 4 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 ...

用C語言實現FlappyBird

在開始遊戲之前,我們先了解一些輔助函式 void gotoxy int x,int y 將游標調整到 x,y 的位置 void hidecursor 隱藏游標 setconsolecursorinfo getstdhandle std output handle cursor info 我們使用乙個...