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

CCF认证201712-2游戏的更多相关文章

  1. CCF认证历年试题

    CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...

  2. 小明种苹果(续)第十七次CCF认证

    小明种苹果(续)第十七次CCF认证 题目 原题链接 ](http://118.190.20.162/view.page?gpid=T93) 很高心,在现在CCF CSP可以下载自己当时的答卷了,也就是 ...

  3. CCF认证(1)

    #include <iostream> #include <windows.h> using namespace std; typedef struct letter{ int ...

  4. CCF 认证4

    题意:求强联通分量 Tarjan算法 #include<iostream> #include<stdio.h> #include<stdlib.h> #includ ...

  5. CCF 认证

    题意:字符串替换 string+map的应用 #include<iostream> #include<stdio.h> #include<stdlib.h> #in ...

  6. CCF认证考试——折点计数

    描述:简单题 #include<iostream> using namespace std; int main() { ], n, count = ; cin >> n; ; ...

  7. CCF认证之——相反数

    这道题目非常简单! #include<iostream> using namespace std; int main() { ],n,count=; cin >> n; ; i ...

  8. ccf认证 201709-4 通信网络 java实现

    试题编号:                                                               201709-4 试题名称: 通信网络 时间限制: 1.0s 内 ...

  9. ccf认证模拟题之三---最大的矩形

    问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3 ...

随机推荐

  1. 爬虫必备—scrapy-redis(分布式爬虫)

    转载自:http://www.cnblogs.com/wupeiqi/articles/6912807.html scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单 ...

  2. OpenGL学习--03--矩阵

    Model--View--Projection 1.tutorial03.cpp // Include standard headers #include <stdio.h> #inclu ...

  3. AngularJs 第一个自定义指令编写

    公司在做一个OA系统, 包括移动端(从微信企业号进入OA系统),电脑端. 电脑端还是用的传统的easyui做界面,asp.net mvc作为服务端.这个技术已经很成熟了配合权限框架很快就能开发出来.但 ...

  4. linux中文字体

     ◆ 背景说明 报表,在windows下,展现.导出都正常,在linux下,字体变大了.比如,单元格的大小设计好后,里面的字当好能一行显示完,将报表放到linux下后,字变大了,一行显示不完了,变 ...

  5. Java简单的数据库连接

    package test.postgre; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Res ...

  6. mysql-sql-standard

    https://github.com/zhishutech/mysql-sql-standard

  7. 转:.NET中的三种Timer的区别和用法(转)

    //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用. System.Windows.Forms.Timer // 2.提供以指定的 ...

  8. ELT探索之旅2 kettle配置

    java环境变量配置: path增加    ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 双击spoon.bat即可

  9. unwrapped与wrapped变量取值的问题

    unwrapped与wrapped变量取值的问题 当我们在定义一个tableView时,是可以使用3种定义方式的,第一种就是定义成optional(AnyObject?)形式,第二种为non-opti ...

  10. Linux 隐藏系统信息

    Linux查看系统信息 [更多参考]https://www.cnblogs.com/ftl1012/p/uname.html Linux隐藏系统信息 查看: cat /etc/issue.net    ...