10个人围成一圈循环报数,输出最后出圈的人
《程序设计基础-c语言》杨莉 刘鸿翔
ISBN-978-7-03-032903-5
p138
习题5
9.假设有10个人围成一圈,从开始顺序编号。从第一个人开始报数,从1到3,凡是报出3的人出圈,问最后出圈的人是原来的几号。
//有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
#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]);}}}
Java版本
import java.util.Scanner;
public class Cycle {public static void main(String[] args) {System.out.println("input 人数:");Scanner sc_n=new Scanner(System.in);int n=sc_n.nextInt();System.out.println("输入要报的数:");Scanner sc_m=new Scanner(System.in);int m=sc_m.nextInt();int[] arr=new int[n];//开始编号for(int i=0;i<arr.length;i++) {arr[i]=i+1;}int exitnumber=0;//退出人数int countnumber=0;//计数int i=0;//退出人数剩最后一个人while(exitnumber<arr.length-1) {// 编号不为0,就计数+1if(arr[i%arr.length]!=0) {countnumber++;}if(countnumber==m) {countnumber=0;//报数清零arr[i%arr.length]=0;//编号清零exitnumber++;//退出人数+1}i++;}for(int j=0;j<arr.length;j++) {if(arr[j]!=0) {System.out.println("最后赢得胜利的是:"+arr[j]+"号");}}}
}
10个人围成一圈循环报数,输出最后出圈的人相关推荐
- 题目98-4:n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
题目转载:http://python.wzms.com/s/1/103 题目描述: n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再 ...
- 题目98-3:围成一圈数三报数且出列——假设有10个人围成一圈,从1开始报数,数到3的人,让他出列,下一个人重新从1开始报数,数到3的人,让他出列……以此类推,把依次出列的9个人的编号打印出来
题目转载:http://python.wzms.com/s/1/103 题目描述: n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再 ...
- n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,……依次类推, 直到所有的人都出圈,请输出依次出圈人的编号.
88,n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,--依次类推, 直到所有的人都出圈,请输出依次出圈人的编号. 输入 n m 输出 出圈的编号 ...
- 10个人围成一个圆圈做游戏,游戏的规则是:每个人心里都想好一个数,并把自己想好的数如实地告诉与他相邻的两个人,然后每个人将与他相邻的两个人告诉他的数的平均数报出来,若报出来的数如图所示
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈:下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序. 考虑问题: 报到T的人出圈,怎么表示出 ...
- 助教c/c++:n个人围成一圈报数问题
以下三个问题都属于同类型的问题,其中两道题目是助教时的实验题,还有一道是华为在成都招聘时的机试题目. 在这三个问题中,问题1考虑的最简单,用指针实现:问题2考虑最全面,用结构体实现:问题3用到了函数. ...
- 约瑟夫环问题,n个人围成一圈,依次按1、2.....m来报数,报数值为m的人出圈,求最后出圈的人和出圈的序列
约瑟夫环问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".),也就是如下图这个样子: 简单来讲就 ...
- 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。
[绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...
- c语言出圈问题10人,第38套题:c语言出圈问题分析.doc
第38套题:c语言出圈问题分析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...
最新文章
- GridView单元格取值显示为nbsp;
- 水晶报表printmode的ActiveX打印
- NCBI中SRA数据库简介
- 【论文解读】A Survey on Visual Transformer及引文理解
- 数据结构——树的简单操作集合
- 转JS总结1--(CSS书写规范和正则表达式)
- unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
- Ubuntu下C++代码调用可执行文件。
- JavaScript学习随记——对象
- 用c++自制词法分析器_编译原理笔记 02 词法分析
- springboot Cacheable(redis),解决key乱码问题
- 软件测试的知识点总结
- Python Intro - xrange obsoleted by Python3
- html5文档加载前调用函数,html调用javascript外部文件显示函数未定义
- Unity3D发布错误:could not allocate memery:system out of memery!
- Android平台的音乐资源管理与播放
- 这个Python自动扫雷算法写完了,估计看懂的人十不存一了吧
- 抖音带货平台怎么收费?抖音带货费用有哪些
- 电容笔和Apple pencil区别有什么?双十一值得入手的电容笔推荐
- php图片文字水印透明度,php图片水印 可以设置透明度
热门文章
- 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。
- R learning 十八讲 0018-R语言绘图基础
- 保存ip地址和计算机名称,批量设置IP地址和计算机名
- 地图上制作线路的动画_纯干货:动画制作的十二个法则(上)
- 2.合并区间(LeetCode第56题)
- MobileNet Unet
- 一致性直线提取--Coherent Line Drawing
- 图像分割--PixelNet: Representation of the pixels, by the pixels, and for the pixels
- Python 基础 一
- java判断两个int相等_Java 判断两个变量是否相等