您的位置:首页 > 编程语言 > C语言/C++

厦大C语言上机 1384 卡片游戏

2018-01-11 10:24 429 查看
1384.卡片游戏

时间限制: 1000 MS          内存限制: 65536 K

        

提交数: 482 (0 users)          通过数: 256 (249 users)

问题描述

这一天,小明他们玩了一个游戏。每个人手中有n张卡片,每一张卡片上有一个整数,接着裁判给出一个整数k,然后每一个人需要选择两张卡片使得两张卡片上的数字之和为k,如果可以出卡片,那么打出这两张卡片。如果不行,那么就该下家出卡片。谁先出完卡片谁就是赢家。现在轮到小明出卡片了,不过由于卡片较多且卡片上数据较大,小明尽可能要在最短时间内决定能不能出卡片,因为其他玩家已经在嚷嚷“快点啊,我等得花儿都谢了!”

输入格式

第一行输入两个整数n、k,2<=N<=1000,0<K<=2,000,000,000。

第二行输入n个整数ai (0<ai<=1,000,000,000),代表n张卡片上的数。

输出格式

为了简单起见,(因为两张卡片数字之和为k的组合可能有多种)如果可以出卡片,则输出“Yes”;如果不能出卡片,则输出“No”(无引号)

样例输入

    5 10

    4 5 6 2 1

样例输出

Yes

来源
xmu

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}

int main()
{
int n, k;
int a[1005] = { 0 };
int i, j;
int is_found;

scanf("%d %d", &n, &k);
for (i = 0; i < n; ++i)
scanf("%d", &a[i]);

qsort(a, n, sizeof(a[0]), cmp);

i = 0;
j = n - 1;
is_found = 0;
while (i < j)
{
if (a[i] + a[j] == k)
{
is_found = 1;
break;
}
else if (a[i] + a[j] < k)
++i;
else
--j;
}
if (is_found)
printf("Yes\n");
else
printf("No\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: