C语言每日一练——第45天:n人围圈报数问题

编程入门 行业动态 更新时间:2024-10-26 07:24:18

C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言每日一练——第45天:n人围圈报数问题"/>

C语言每日一练——第45天:n人围圈报数问题

C语言每日一练
2021年10月27日

文章目录

  • 题目描述
  • 分析
  • 代码实现
  • 运行结果
  • 网上参考

题目描述

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

分析

可以采用直观的数组法,将这些人的编号放入一个数组,数组值为0表示淘汰,非0表示在场,一直循环遍历数组,每经过3个在场的数组值(非0),就将第3个数组值置0,直到数组中只剩一个有效值(数组值非0),此时这个数组的下标即留下来的成员编号。

代码实现

#include <stdio.h>int main()
{int num = 0;              //总人数int left_num = 0;         //当前余下的人数int i = 0; int count = 0;            //报数 1-3printf("请输入人数n\n");scanf("%d", &num);left_num = num;int array[num + 1];       //存放人员的号码for(i = 0; i <= num; i++) //0号无效array[i] = i;         //1-num为人员号码i = 0;while(left_num > 1)       //余下的人数大于1{i++;if(i > num)i = 1;            //新的一轮 1-numif(array[i] != 0)count++;          //报数if(count == 3){array[i] = 0;     //报到3的人退出循环count = 0;        //报数复位,再从1开始left_num--;       //余下人数-1printf("%d号退出\n", i);  //Debug}}for(i = 0; i <= num; i++)if(array[i] != 0)printf("最后留下的是%d号\n", i);return 0;
}

运行结果

网上参考

原文链接:.html
思路是一样的,毕竟这个方法简单直观。

//  Created by www.runoob on 15/11/9.
//  Copyright © 2015年 菜鸟教程. All rights reserved.
//#include <stdio.h>
void main()
{int num[50],n,*p,j,loop,i,m,k;printf("请输入这一圈人的数量:\n");scanf("%d",&n);p=num;//开始给这些人编号for (j=0;j<n;j++){*(p+j)=j+1;}i=0;//i用于计数,即让指针后移m=0;//m记录退出圈子的人数k=0;//k报数1,2,3while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人//这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,//这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出{if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0{k++;}if (k==3){    k=0;    //报数清零,即下一个人从1开始报数*(p+i)=0;//将报数为3的人编号重置为0m++;    //退出人数加1}i++;      //指针后移if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头//并且它只能放在i++后面,因为只有i++了才有可能i==n{i=0;}}printf("现在剩下的人是:");for (loop=0;loop<n;loop++){if (num[loop]!=0){printf("%2d号\n",num[loop]);}}}

更多推荐

C语言每日一练——第45天:n人围圈报数问题

本文发布于:2024-03-12 06:50:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1730935.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   人围圈

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!