前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >游戏-CSP201712-2-Java

游戏-CSP201712-2-Java

作者头像
开心鸭
发布2020-10-26 14:40:16
5640
发布2020-10-26 14:40:16
举报

问题描述

  有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号小朋友获胜。   给定nk,请问最后获胜的小朋友编号为多少?

输入格式

  输入一行,包括两个整数nk,意义如题目所述。

输出格式

  输出一行,包含一个整数,表示获胜的小朋友编号。

样例输入

5 2

样例输出

3

样例输入

7 3

样例输出

4

数据规模和约定

  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

题目比较简单,详细注释写在代码里了。

代码语言:javascript
复制
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numpeople = scanner.nextInt();
        int k = scanner.nextInt();
        int arr[] = new int[numpeople + 1]; //从1开始计数所以多开辟一个数组
        for (int i = 1; i < numpeople + 1; i++) {
            arr[i] = i;
        }
        boolean flag = true; //是否是只剩下一个
        int numberoff = 1; //报数的数字
        while (flag) { //如果不是最后一个同学那就继续报数
            int globletemp = 0; //用来退出大循环
            for (int i = 1; i < numpeople + 1; i++) {
                if (arr[i] == -1) {
                    continue;  //如果是已经淘汰的同学则跳过
                }
                int temp = 0;
                for (int j = 1; j < numpeople + 1; j++) {
                    if (arr[j] == -1) {
                        temp++; //看有多少人被淘汰
                    }
                }
                globletemp = temp;
                if (temp == numpeople - 1) { //如果淘汰的人等于总人数-1那代表只剩下一人
                    flag = false;
                    break;
                }

                if (numberoff % k == 0 || numberoff % 10 == k) { //用mod和mod10来看是否是倍数和个数位
                    arr[i] = -1; //如果符合的话就淘汰
                }
                numberoff++; //报数+1
            }

            if (globletemp == numpeople - 1) {
                for (int i = 1; i <= numpeople; i++) {
                    if (arr[i] != -1) {
                        System.out.println(arr[i]);  //如果是-1就跳过,不是的话就打印
                    }
                }
                break;
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档