关闭

出圈子问题

273人阅读 评论(0) 收藏 举报
分类:

题目描述:
有n个人围成一圈,按顺序排号 从第一个人开始报数(从1到3报数) 所有报到3的人退出圈子 问最后留下来的是第几个人
我们可以将这个题目看成以一类题目:
n个人围成一圈 从第一个人开始数 数到N的人被淘汰 问最后剩哪个人(n和N由键盘输入)

/**
 * 设没有被淘汰的人的状态为 0  淘汰了的人的状态为 1 
 */

#include <iostream>
#include <cstdio>
using namespace std;


int main() {
    int n, N;
    cin >> n >> N;
    int sum = 0, num = 0, h[n] = {0};//对数组赋初值为0


    for ( int i = 0; sum != n - 1; i++ ){//一直循环直到只剩一个人在圈子里面 
        if ( !h[i % n] ) { //如果h[i%n]为0则继续数 (注意对人数取余  防止越界)
            num++;
            if ( !(num % N) ) { //数到数字N的时候令其等于1(出圈子) 
                h[i % n] = 1;
                sum++;
            }
        }
    }

    for ( int i = 0; i < n; i++ ) {
        if ( h[i] == 0 ) {
            printf("%d\n", i  + 1);//输出最后剩下的一个在圈子里面的下标加一(因为是第几个人  从1开始)
        }
    }
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27521次
    • 积分:973
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条