问题描述
  有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。

思路:使用队列实现。

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner; public class Main_Game {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();// 小朋友个数
int num = sc.nextInt();// 需要数的数
int currnum = 1;
Queue<Integer> queue = new ArrayDeque<Integer>();// 小朋友组成的队列
for (int i = 1; i <= count; i++) {
queue.add(i);
}
while (queue.size() > 1) {
int top = queue.element();//队首元素
queue.remove();//删除队首元素
if(currnum % num !=0 && currnum %10 != num){
//如果不是num的倍数并且不包含num
queue.add(top);//将元素加入队尾
}
currnum ++;
}
System.out.println(queue.element());
}
}

链表实现:

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner; public class CountGame {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();// 小朋友个数
int num = sc.nextInt();// 需要数的数
int currnum = 0;
int currid = 0;
List<Person> pers = new LinkedList<Person>();
for(int i = 0; i < count; i++){
Person pes = new Person(i+1);
pers.add(pes);
}
while (pers.size() > 1) {
currnum ++;
if (currnum % num != 0 && currnum%10!=num) {
// 数到不是num的倍数也不包含num的数
pers.get(currid).setNumber(currnum);
}else{
pers.remove(currid);
if(currid >= pers.size()){
currid = 0;
}
continue;
}
if(currid < pers.size()-1){
currid++;
}else{
currid = 0;
}
}
System.out.println(pers.get(0).getId());
}
}
class Person {
private int id;
private int number; public Person(){} public Person(int id){
this.id = id;
} public Person(int id,int number){
this.id = id;
this.number = number;
} public int getId() {
return this.id;
} public void setId(int id) {
this.id = id;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} }

最新文章

  1. C#通过反射进行枚举描述相关操作
  2. js之序列化、eval和Date类用法
  3. OpenGL在 win8 64bits系统下的配置
  4. 对iframe跨域通信的封装
  5. java Class的Long id初始化 为0的问题android数据库操做出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
  6. HDU_2025——查找最大的字母
  7. 【笔记】css浮动的一些个人见解
  8. [Deep Learning] 神经网络基础
  9. discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)
  10. TS学习随笔(二)-&gt;类型推论,联合类型
  11. 关于svn上传.classpath等问题
  12. LeetCode - 769. Max Chunks To Make Sorted
  13. Gif动态图UIImage
  14. string截取、替换、查找子串函数,find_first_of 用法
  15. Spring Boot log4j多环境日志级别的控制
  16. PS前端
  17. 为什么对一些矩阵做PCA得到的矩阵少一行?
  18. consul ACL2
  19. php查询某个字段指定值的所有条数
  20. 【PHP系列】框架的抉择

热门文章

  1. 什么是URI,URL以及URN,你真的理解了吗。
  2. WPF ListView 分组 Grouping
  3. RESTful API的十个最佳实践
  4. this and super
  5. webpack的require是如何工作的?
  6. Oracle EBS AR 更新客户账户层
  7. Inside Amazon&#39;s Kafkaesque &quot;Performance Improvement Plans&quot;
  8. Linux partprobe命令详解
  9. SpringBoot @AutoWired Null
  10. SpringBoot+MyBatis连接数据库