PAT-B1069 微博转发抽奖(20 分)

1069 微博转发抽奖(20 分)

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

输入格式:

输入第一行给出三个正整数 M(≤ 1000)、N 和 S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从 1 开始)。随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符、不包含空格回车的非空字符串)。

输出格式:

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

输入样例 1:

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

输出样例 1:

PickMe
Imgonnawin!
TryAgainAgain

输入样例 2:

2 3 5
Imgonnawin!
PickMe

输出样例 2:

Keep going...

分析:

1.如果第一个中奖的序号大于转发人数,无人中奖。

2.对于当前正在遍历的昵称,如果该昵称已经中过奖,则看其下一位是否;如果该昵称尚未中奖,输出该昵称,标记该昵称为已中奖,看其第下N个昵称是否中奖。

代码:

#include <iostream>
#include <string>
#include <vector>
#include <set>

using namespace std;

int main()
{
    int M, N, S, i;
    vector<string> nick;
    set<string> luck;
    string in;
    cin >> M >> N >> S;
    cin.get();
    for(i = 0; i < M; i++)
    {
        cin >> in;
        nick.push_back(in);
    }
    if(S > M)
    {
        cout << "Keep going..." << endl;
        return 0;
    }
    i = S - 1;
    while(i < M)
    {
        if(luck.find(nick[i]) == luck.end())
        {
            cout << nick[i] << endl;
            luck.insert(nick[i]);
            i += N;
        }
        else
            i++;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38127801/article/details/81124542
今日推荐