欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 }

 

 运行截图:

n人围成一圈报数

 

推荐阅读