抽签问题:
你的朋友提议玩一个游戏:将写有数字的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
此问题属于简单的算法分析题,很容易得出结论;
代码如下:
1 #include <iostream> 2 #include <stdio.h> 3 4 using namespace std; 5 const int MAX=50; 6 7 int main() 8 { 9 int i,n,m,k[MAX]; 10 scanf("%d %d",&n,&m); 11 for(i=0;i<n;i++) 12 { 13 scanf("%d",&k[i]);; 14 } 15 int flat=0; 16 for(int a=0;a<n;a++) 17 for(int b=0;b<n;b++) 18 for(int c=0;c<n;c++) 19 for(int d;d<n;d++) 20 { 21 if(k[a]+k[b]+k[c]+k[d]==m) 22 flat=1; 23 } 24 if(flat==0) 25 printf("YES"); 26 else 27 printf("NO"); 28 return 0; 29 }