n人围成一圈报数
程序员文章站
2022-06-23 21:58:31
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位 思路:用一个数组存这n个人,里面的初始状态全设为1,表示都还在圈子里面。 然后用q来记录报的号,因为每次报号报到3的人就得退出圈子,用j来表示圈子内剩余的人数。 每当有人报到 ......
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位
思路:用一个数组存这n个人,里面的初始状态全设为1,表示都还在圈子里面。
然后用q来记录报的号,因为每次报号报到3的人就得退出圈子,用j来表示圈子内剩余的人数。
每当有人报到3时,j-1,同时将数组中该元素的值标记为0,q清0。
这样while循环结束后,数组中就只会剩下一个人的值为1,输出那个人的序号+1即可(数组是从0开始,所以+1)
1 #include<stdio.h> 2 int main(){ 3 int a[100]; 4 int n; 5 int i,j; 6 printf("请输入有多少人参加该游戏:"); 7 scanf("%d",&n); 8 j=n; 9 for(i=0;i<n;i++) 10 a[i]=1; 11 int q=0; //记录步数 12 while(j>1){ 13 for(i=0;i<n;i++){ 14 if(a[i]!=0) q++; 15 if(q==3) { 16 a[i]=0; 17 j--; 18 q=0; 19 printf("第 %d 位玩家出圈\n",i+1); 20 } 21 } 22 } 23 printf("\n"); 24 for(i=0;i<n;i++){ 25 if(a[i]==1) printf("最后在圈内的是第 %d 位玩家",i+1); 26 } 27 }
运行截图:
上一篇: Git 命令使用技巧提供工作效率
下一篇: php判断电子邮件是否正确方法
推荐阅读
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
-
约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
n人围成一圈报数
-
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位
-
13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
-
C程序--报数(有n个人围成一圈。。。。)
-
(C语言)13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子.找出最后留在圈子中的人原来的序号,要求用链表实现
-
每日一题· 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员?
-
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。