1. 题目

PAT (Basic Level) Practice (中文): 1069

小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。

1.1. 输入格式:

输入第一行给出三个正整数 M(≤ 1000)、N 和 S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从 1 开始)。随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符、不包含空格回车的非空字符串)。
注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。

1.2. 输出格式:

按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出 Keep going...

1.3. 样例

1.3.1. 输入样例 1:

9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain

1.3.2. 输出样例 1:

PickMe
Imgonnawin!
TryAgainAgain

1.3.3. 输入样例 2:

2 3 5
Imgonnawin!
PickMe

1.3.4. 输出样例 2:

Keep going...

2. 作答

2.1. 代码

#include "stdio.h"
#include "string.h"

int main(int argc, char const *argv[]) {
    int i, j, flag, con=0, res=1;
    char name[1010][30];
    int winer[1010]={0};
    int m, n, s;
    scanf("%d%d%d", &m, &n, &s);
    for (i = 1; i < s; ++i){
        scanf("%s", &name[i]);
    }
    for (i = s; i <= m; ++i) {
        scanf("%s", &name[i]);
        if(con > 0) {
            --con;
            continue;
        }
        flag = 1;
        for(j = 1; j < i; ++j) {
            if(strcmp(name[i], name[j]) == 0 && winer[j] == 1){
                flag = 0;
                break;
            }
        }
        if(flag==1){
            printf("%s\n", name[i]);
            winer[i] = 1;
            res = 0;
            con = n-1;
        }
    }
    if(res) printf("Keep going...");

    return 0;
}

2.2. 评测结果

提交时间 状态 分数 题目 编译器 耗时 用户
2019/3/7 00:57:25 答案正确 20 1069 C (gcc) 5 ms soulans
测试点 结果 耗时 内存
0 答案正确 3 ms 384 KB
1 答案正确 2 ms 376 KB
2 答案正确 2 ms 256 KB
3 答案正确 2 ms 256 KB
4 答案正确 5 ms 376 KB