1. 题目
2. 代码
#include <iostream>
#include <unordered_map>
#include <cstring>
using namespace std;
int main(){
int m,n,s;
cin>>m>>n>>s;
string name[m+1];
if(s > m){
cout<<"Keep going..."<<endl;
}else{
for(int i=1; i<=m; i++){
cin>>name[i];
}
//输出的次数
int count = (m-s)/n;
if(count == 0){
//输出唯一的一个中奖的
cout<<name[s]<<endl;
}else{
unordered_map<string, int> hash;
cout<<name[s]<<endl;
hash[name[s]]++;
//输出下面的中奖的人
int i=s+n;
while(i<=m){
if(hash[name[i]] != 0){
i++;
//cout<<"name:"<<name[i]<<hash[name[i]]<<endl;
//cout<<name[i]<<endl;
}else{
hash[name[i]]++;
//cout<<"name:"<<name[i]<<hash[name[i]]<<endl;
cout<<name[i]<<endl;
i = i + n;
}
}
}
}
}
3. 解题思路
将输入存储在一个字符串数组中,用while循环来掌控整个抽奖过程。通过建立一个hash表并对其进行标记,可以在每次遍历时判断当前用户是否已经抽到。如果已经抽到,则下标加加到下一位;如果没有被抽到,则输出当前的昵称。