小明 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…
思路:
用两个字符串数组,一个保存读入的,一个保存获奖的名字(用于后面判断这个名字是否出现过)
一个count 用来记录间隔,注意输出是从第一个序号开始的,所以只对第一个序号后面的下表进行判断,另外一个COUNT用来记录中奖的人数
package Main;
import java.util.*;
public class Main {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int i,j;
int M,N,S;//总数,间隔,第一个的序号
M=in.nextInt();
N=in.nextInt();
S=in.nextInt();
int count=0,COUNT=0;
String name[]=new String[1000];
String huojiang[]=new String[1000];//保存获奖的人
//输入
for(i=0;i<M;i++)
{
name[i]=in.next();
}
//判断获奖的过程,第一个序号之前的不判断,注意下表要+1,因为我们是从1 2 3数的,对应数组就是0 1 2
for(i=0;i<M;i++)
{
if(i+1==S)//到第一个序号
{
System.out.println(name[i]);
huojiang[COUNT++]=name[i];//总次数+1//保存这个名字
}
else if(i+1>S) //只有大于等于第一个序号后面的才可以输出
{
int flag=0;//标志这个是否在获奖名单里面
for(j=0;j<COUNT;j++)
{
if(huojiang[j].equals(name[i]))//发现相同
{
flag=1;
break;
}
}
if(flag==0) //没有中过奖
{
count++;
if(count==N)//到达间隔
{
System.out.println(name[i]);
count=0;//赋0,重新计数,当计数到N的时候才输出,这个count是方便查询间隔
huojiang[COUNT++]=name[i];//总次数+1//保存
}
}
}
}
if(COUNT==0)//没有人获奖
System.out.print("Keep going...");
}
}