Description
小 y 小时候玩过一种游戏,一个摆摊者手里握着一个黑色的、外面看不见的扎口的袋子,里面
放了 n 张纸牌,每张纸牌上有一个非负整数。你可以花 1 分钱到口袋里摸 4 次,每次摸出 1 张牌,记下牌
上的数,再放回袋子里。如果 4 个数的和正好等于 m,那么你就可以赢得一份奖品。
小 y 玩过很多回,结果一次也没赢过,郁闷了这么多年,一直不得其解。不过,小 y 自从学习
了编程后突然领悟了,那个摆局者是骗小孩钱的。这一次,小 y 穿越到那个时候,撕开口袋,取出
所有纸牌,检查自己是否真的有赢的可能。
请你编写一个程序,判断当纸牌上的数分别是 K1,K2,…,Kn 时,是否存在抽取 4 次和为 m 的方
案。如果存在,输出“Yes”, 否 则 输 出 “No”。
Input
输入数据共 2 行,第 1 行为 2 个整数,依次为 n 和 m。
第 2 行为 Ki,每 2 个数之间有 1 个空格隔开。
Output
输出一行一个字符串“Yes”或者“No”, 注意区 分大小写,输出不包括引号。
Sample Input
3 10
1 3 5
Sample Output
Yes
Hint
1 <= n <= 2000
你题目的解答代码如下:
#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;
}
如有帮助,望采纳!谢谢!