演算法小題之抽籤問題

2021-07-02 06:26:09 字數 1114 閱讀 5021

抽籤問題:

你的朋友提議玩乙個遊戲:將寫有數字的n

個紙片放入口袋中,你可以從口袋中抽取

4次紙片,每次記下紙片上的數字後都將其放回口袋中。如果這

4個數字的和是

m,就是你贏,否則就是你的朋友贏。

請你編寫乙個程式,判斷當紙片上所寫的數字是k1,k2,... ,kn時,是否存在抽取4

次和為m

的方案。如果存在,輸出為

yes;否則,輸出為no。

限制條件:

1<=n<=50

1<=m<=10^8

1<=ki<=10^8

樣例輸入

3 10

1 3 5

第一行代表n,m

,第二行代表ki

樣例輸出:

yes例如當4

次抽取的結果是

1,1,3,5

,和就是

10因為n

的範圍較小,首先想到的便是使用簡單的

4重迴圈,及窮舉思想。以下是實現**:

/*

* this file is to solve the draw_lots problem

* compiled by g++

* date:2015-05-06

* version:0.1

* author:zhang

*/#include using namespace std;

const int maxn = 50;

int main()

int flag=0;

//four loops

for(int a = 0;a < n; a++)

for(int b = 0;b < n; b++)

for(int c = 0;c < n; c++)

for(int d = 0;d < n; d++) }

if(flag)

else

return 0;

}

整個演算法的時間複雜度是o(n^4),當

n值較大時,就應該考慮一下優化問題了。這個優化將在抽取問題(續)中分享與討論。

版)

暴力列舉演算法的優化 抽籤問題

將寫有數字的n個紙片放入口袋中,你可以一次從口袋抽取4次紙片,每次記下紙片的數字後將其放回口袋。如果這4個數字的和是m,那麼你就贏了,否則你就輸了。編寫程式,判斷當紙片上的數字是k1,k2,kn時,是否存在抽取4次和為m的方案。如果存在,輸出yes 否則輸出no.限制條件,資料規模 1 n 1000...

抽籤問題(不斷優化)

問題描述 假設存在n個籤,通過抽取四次,如果四次抽取的和為m即勝利。初始解 1 for int a 0 a n a 212 13 14 難度增加,將n的限制條件為1 1000,此時,四重迴圈明顯複雜度過高,需改進演算法。上面所記載的程式的迴圈部分。最內側關於d的迴圈所做的事就是 檢查是否有d使得 通...

演算法小題 最大連續子串行和問題

解法二解法三 解法三 番外版 實驗結果 刷題的時候遇到了這個最大連續子串行和的問題,查閱研究了一下。記錄在此。希望能夠便人便己。給定乙個陣列a n 陣列元素均為自然數集 有正數,有負數 請求出該陣列乙個連續的子串行,使得這個子串行的和值最大,示例如下 a 那麼它的最大連續子串行為 和值 23 說明 ...