C语言编程,求解答

C语言编程,求解答算术游戏:

某同学参加一个算术纸牌游戏。游戏开始时,每个人被分配n张纸牌,每一张纸牌上有一个正整数。该同学习惯将手中的牌按大小顺序排序。

接着裁判给出一个整数k,然后每一个人需要选出两张数字之和为k的纸牌,如果可以选出,则打出这两张纸牌;如果不行,则说NO 。最后将剩余的牌按非递减顺序显示。

请你编程决定能否出牌,并按要求输出结果。

输入:

第一行输入两个整数n、k(5<n<1000,0<k<2000)

第二行输入n个整数ai (0<ai<1000),代表n张纸牌上的数。

输出:

如果可以出纸牌,则输出纸牌上的数字 。(两个数字之和为k的组合可能有多种,只需输出其中一个)

如果不能出纸牌,则输出 No 。

然后输出剩余的牌,按非递减顺序 。

输入样例1:

6 16

5 2 1 7 3 8

输出样例1:

出:NO

余牌:1 2 3 5 7 8

输入样例2:

7 100

45 52 55 21 79 16 55

输出样例2:

出:21 79

余牌:16 45 52 55 55a

#include <stdio.h>
int ai[1000];
void main()
{
    int n, k;
    int i;
    scanf("%d %d", &n, &k);
    for(i = 0; i < n; i++) {
        scanf("%d", ai);
        ai[ai[0]]++;
    }
    for(i = 1; i < k - i; i++) {
        if (ai[i] && ai[k - i]) {
            printf("%d %d\n", i, k - i);
            ai[i]--, ai[k - i]--;
            goto NEXT;
        }
    }
    if (k % 2 == 0 && ai[k / 2] > 1) {
        ai[k / 2] -= 2;
        printf("%d %d\n", k / 2, k / 2);
    }
    else
        printf("No\n");
NEXT:
    printf("余牌:");
    for(i = 1; i < 1000; i++) {
        if (ai[i]) {
            printf("%d ", i);
            if (ai[i] > 1)
                for(ai[0] = 0; ai[0] < ai[i] - 1; ai[0]++)
                    printf("%d%c ", i, 'a' + ai[0]);
            
        }
    }
    printf("\n");
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-17
sort(a+1,a+n+1);

bool flag = false;
for(int i=1;i<n;++i)if(a[i]+a[i+1]==k){
cout<<a[i]<<" "<<a[i+1]<<endl;flag = true;break;
}
if(!flag)cout<<"NO"<<endl;
....其余输入输出略了,sort函数需要库algorithm
相似回答