您的位置:首页 > 编程语言 > Java开发

CCF CSP 201712-2 游戏 java

2018-03-14 21:11 501 查看
试题编号:201712-2
试题名称:游戏
时间限制:1.0s
内存限制:256.0MB
问题描述:问题描述  有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。
  游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。
  例如,当n=5, k=2时:
  1号小朋友报数1;
  2号小朋友报数2淘汰;
  3号小朋友报数3;
  4号小朋友报数4淘汰;
  5号小朋友报数5;
  1号小朋友报数6淘汰;
  3号小朋友报数7;
  5号小朋友报数8淘汰;
  3号小朋友获胜。

  给定n和k,请问最后获胜的小朋友编号为多少?输入格式  输入一行,包括两个整数n和k,意义如题目所述。输出格式  输出一行,包含一个整数,表示获胜的小朋友编号。样例输入5 2样例输出3样例输入7 3样例输出4数据规模和约定  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。
解题思路:只要是符合先进先出数据结构的都可以用来进行存储,例如ArrayList,HashMap都可以用来存储
但是需要注意的是在使用Iterator.remove()这个函数之前需要先判断ar这个数组的大小,如果是1,就需要退出循环了,虽然没找到具体的实例来验证,我在这卡了很久,一直是90分,修改了那个判断条件(代码中用红色标出部分)之后猜得到了满分。
java代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Scanner;

//存储结构:hashMap
public class _22{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sin=new Scanner(System.in);
int n=sin.nextInt();
int k=sin.nextInt();
ArrayList<Integer>   ar=new ArrayList();
for(int i=1;i<=n;i++)
{
ar.add(i);
}
int num=1;
Iterator<Integer> it=ar.iterator();
while(ar.size()>1)
{
while(it.hasNext())
{
Integer en=it.next();
if(num%k==0||num%10==k)//判断是不是的k的倍数或者个位数是不是k
{
if(ar.size()==1)
{
break;
}
it.remove();
}
num++;
}
it=ar.iterator();
}
int out=ar.iterator().next();//输出结果
System.out.println(out);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ccf java