1. 程式人生 > >程式設計挑戰1:抽籤問題

程式設計挑戰1:抽籤問題

問題:

你的朋友提議玩一個遊戲:將寫有數字的 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;
}