程式設計挑戰1:抽籤問題
阿新 • • 發佈:2019-02-03
問題:
你的朋友提議玩一個遊戲:將寫有數字的 n個紙片放入口袋中,你可以從口袋中抽取 4次紙
片,每次記下紙片上的數字後都將其放回口袋中。如果這 4個數字的和是 m,就是你贏,否
則就是你的朋友贏。你挑戰了好幾回,結果一次也沒贏過,於是怒而撕破口袋,取出所有紙
片,檢查自己是否真的有贏的可能性。請你編寫一個程式,判斷當紙片上所寫的數字是 k 1 ,
k 2 , …, k n 時,是否存在抽取 4次和為 m的方案。如果存在,輸出 Yes;否則,輸出 No。
限制條件
1 ≤ n ≤ 50
1 ≤ m ≤ 10 8
1 ≤ k i ≤ 10 8
輸入
n = 3
m = 10
k = {1, 3, 5}
輸出
Yes(例如4次抽取的結果是1、1、3、5,和就是10)
實現過程:
因為每個數字都可以重複使用,所以這裡利用暴力搜尋就可以了,四重迴圈搞定問題
程式碼:
#include <iostream> using namespace std; const int max_n = 50; int main(){ int n,m,k[max_n],flag=0; cin>>n>>m; for(int i=0;i<n;i++){ cin>>k[i]; } 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(k[a]+k[b]+k[c]+k[d]==m){ flag = 1; } } } } } if(flag==1){ cout<<"yes"; } else cout<<"No"; return 0; }