题目描述:https://www.patest.cn/contests/pat-a-practise/1124
/**
明确题意:是从获奖的那个人开始的第n个人为下一个获奖的人。要不这么理解本题的难度就要加大。
*/
#include <iostream>
#include <string.h>
using namespace std;
#define MAX 1010
#define N 22
typedef struct Node
{
char data[N];
int flag; //代表是否为winner
}Node;
Node node[MAX];
int main ()
{
int m,n,s,length;
while( cin>>m>>n>>s )
{
length = 1; //从1开始存储
for( int i=1;i<=m;++i )
{
char key[N];
cin>>key;
strcpy(node[length].data,key);
node[length].flag = 0;
length++;
}
length--;
// cout<<length<<endl; //输出长度
if( s > length ) //无获奖名单的情况
{
cout<<"Keep going..."<<endl;
continue;
}
for( int j=s;j<=length; )//检查符合的人
{
if( node[j].flag == 0 ) //要获奖的人
{
int k;
for( k=1;k<=length;++k ) //检查该人是否在获奖名单中
{
if( node[k].flag == 1 && strcmp(node[k].data,node[j].data) == 0 ) //在获奖名单中,并且已经获得过,则考虑下一个
{
break;
}
}
if( k == length+1 ) //没有在获奖名单中
{
cout<<node[j].data<<endl;
node[j].flag = 1;
j = j+n;
}
else //在获奖名单中,则检查下一个
++j;
}
}
}
return 0;
}