2048最少的合成次數

2021-10-02 23:58:22 字數 1156 閱讀 1287

■題目描述

有乙個數字遊戲叫做2048,此遊戲的規則為,兩個相同的數字能進行相加。例如:兩個2可以相加,則相加後4的個數加一,2的個數會減二。

現在有一串數字,為目前已知的數字的數量。問至少還需要幾次相加,才能獲得2048 (題目保證能夠相加得到2048)。

輸入描述:

第一行為樣例數t,代表後面會跟隨工組測試資料。

每組測試資料輸入10個數,分別代表

2,4,8,16,32,64,128,256,512,1024的個數。

每種數字的個數不超過1024。

輸出描述:

對於每組資料, 輸出乙個數, 表示需要得到2048最少需要相加的次數。輸入2

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 2

輸出10

1個人思路:作為程式設計師,對2,4,8,16,32,64,128,256,512,1024這一串數字真的很熟悉,所以自然想到了需要用位運算。這些數分別是2的1,2,3,4,5,6,7,8,9,10次方,而目標2048正好是2的11次方。

那就是說二進位制位的第11位是0,需要有其它上述型別數字相加得到2048,使得結果的第11位為1。應該盡量選用高位去相加。

遞迴方法

void

merge

(vector<

int>

&array,

int×,

int index)

if(index >0)

merge

(array, times, index -1)

;}intmain()

return0;

}

迴圈方法

#include

#include

#include

using

namespace std;

intmain()

else}}

printf

("%d"

, n);}

system

("pause");

}

最少乘法次數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述給你乙個非零整數,讓你求這個數的n次方,每次相乘的結果可以在後面使用,求至少需要多少次乘。如24 2 2 22 第一次乘 22 22 24 第二次乘 所以最少共2次 輸入第一行m表示有m 1 m 100 組測試資料 每一組測試資料...

出現次數最少的數

閒來無事,想著把ccf刷到三百分 問題描述 給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的乙個。輸入格式 輸入的第一行只有乙個正整數n 1 n 1000 表示數字的個數。輸入的第二行有n個整數s1,s2,sn 1 si 10000,1 i n 相鄰的數用空格分隔。輸...

最少交換次數

第乙個問題 現在想通過交換相鄰元素的操作把乙個給定序列交換成有序,最少需要交換的次數是多少?比如3 1 2 4 5需要最少交換2次。答案 需要交換的最少次數為該序列的逆序數。證明 可以先將最大數交換到最後,由於是相鄰兩個數交換,需要交換的次數為最大數後面的數的個數 可以看做是最大數的逆序數 然後,交...