将写有数字的n个纸片放入一个纸箱子中,然后你和你的朋友从纸箱子中抽取4张纸片,每次记下纸片上的数字后放回子箱子中,如果这4个数字的和是m,代表你赢,否则就是你的朋友赢。
请编写一个程序,当纸片上所写的数字是k1,k2,k3,k4,..,kn时,是否存在抽取4次和为m的方案,如果存在,输出YES;否则,输出NO。
限制条件:
1 <= n <= 50
1 <= m <= 10^8
1 <= ki <= 10^8
样例:
- n=3
- m=10
- k={1,3,5}
- Yes {1 ,1 ,3,5就是10}
-
#include <iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn=1010; int k[maxn]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0; i<n; i++) { scanf("%d",&k[i]); } bool f=false; 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) { f=true; } } } } } if(f) printf("Yes\n"); else printf("No\n"); return 0; }