前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言实现n人围圈报数,报到3的人退出圈子,求最后留下的是几号位的人?

c语言实现n人围圈报数,报到3的人退出圈子,求最后留下的是几号位的人?

作者头像
吃猫的鱼Code
发布2023-02-02 10:53:52
7080
发布2023-02-02 10:53:52
举报
文章被收录于专栏:吃猫的鱼个人博客编程笔记

题目描述

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?

该题目是c程序设计课本上的一道课后习题,今天刚好做到,在此分享一下我的解法。

题目解析

首先,我们需要弄一个数组,来表示人,1代表人还在位置上,0代表人已经退出圈子。

由于题目的要求是人是围圈一直报数,因此我们需要判断报数是否已经到了最后一个,要是人到了最后一个,需要重置回数组的第一个元素。

另外,需要判断当前的座位是否有人,要是没人,就直接跳过当前位置。要是有人,报数+1。然后判断报数的数字,是否报到3,如果报了3,将当前数组的元素赋为0,并且将报数重置为1。

循环结束条件是,当前的数组只剩一个元素为1,我们可以设置一个变量专门记录剩余人数,每当坐下一个人,剩余人数减一。

代码

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
void main(){
    int people[5]={0};                        //n变量代表有n个人
    for(int i=0;i<5;i++){                    //给people变量赋值1,代表当前的人还在报数,0则代表该位置的人已经空了
        people[i]=1;
    }
    
    void sort(int people[5],int n);
    sort(people,5);                            //需要n传入有多少人参与排序
    system("pause");    
}


void sort(int people[5],int n){
    int now=1,least=n,now_people=0;        //now变量代表是当前的报数为多少,least变量表示当前当前剩余的人数,now_people是指当前轮到哪个人报数
    do{
        if(now_people>n-1){            //判断当前轮到的人是否超出最多人数,如果超出,则变成0
            now_people=0;
        }
        if(people[now_people]==0){        //如果当前为空,就往前加一个
            now_people++;
        }else{                            //如果当前不为空
            if(now==3){                    //如果报数是三,那么当前的元素就变成0
                people[now_people]=0;
                least--;
                now=1;                    //重置报数
            }else{
                now++;
            }
            now_people++;
        }    
    }while(least>1);                                    //当人数仅剩一人的时候跳出循环
    
    for(int i=0;i<n;i++){                //输出唯一的属性为1的元素
        if(people[i]==1){
            printf("%d",i+1);            //输出是剩下的是第几个人
        }
    }
}

本文共 485 个字数,平均阅读时长 ≈ 2分钟

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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