前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >出圈子问题

出圈子问题

作者头像
指点
发布2019-01-18 15:12:02
3820
发布2019-01-18 15:12:02
举报
文章被收录于专栏:指点的专栏指点的专栏

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

代码语言:javascript
复制
/**
 * 设没有被淘汰的人的状态为 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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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