CCF历届真题之游戏(_1712_2_Game.java)

CCF历届真题之游戏(_1712_2_Game.java)

问题描述:

试题编号: 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。

参考代码:

package com.test;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 
 * @Author: Dina
 * @Time: 2018年1月13日 
 * @Description:游戏
 * @Score: 100分
 */
public class _1712_2_Game {

	public static void main(String[] args) {	
		Scanner src=new Scanner(System.in);
		int n=src.nextInt();
		int k=src.nextInt();
		int yu=0 ,j=0;		
		ArrayList<Integer> list = new ArrayList<Integer>();		
		for (int i = 1; i < n+1; i++) {
			list.add(i);
		}		
		for (int i = 0; i < list.size(); i++) {		
			j=i+1;
			
			while(j>10){	//处理报的数大于10的数		
				yu=j%10;
				j=yu;
			}
			j=i+1;
			//报的数不为k的倍数且其末位数(即数的个位)不为k,则该小朋友不被淘汰出局,继续参加以后的报数
			if((j%k!=0)&&(yu!=k)&&(j!=k)){
				list.add(list.get(i));
			}				
		}		
		System.out.println(list.get(list.size()-1));
		src.close();
	}
}


提交可通过:

经验分享 程序员 微信小程序 职场和发展