c语言,有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子

下一个人从1开始报数,报到m的人退出圈子。如此下去,直至留下最后一个人。输入n和m,并按退出顺序输出退出圈子的人的编号。下列程序是否正确,请标注每一段的含义!!

#include<stdio.h>
int main()
{int m,n,a[100],out=0,i,j=0;
scanf("%d%d",&n,&m); /*输入m,n*/

for(i=0;i<n;i++)
a[i]=i+1;
while(out<n)
{for(i=0;i<n;i++)
{if(a[i]!=0)
j++;
if(j==m)
{printf("%d\n",a[i]);out++;j=0;a[i]=0;} /*依次打印退出人的编号*/
if(i==n-1) break;
}
}
i=0;
if(a[i]!=0)
{printf("%d",a[i]);i++;} /*最后打印剩下一人的编号*/
}

请采纳
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言,有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m...
{int m,n,a[100],out=0,i,j=0;scanf("%d%d",&n,&m); \/*输入m,n*\/ for(i=0;i<n;i++)a[i]=i+1;while(out<n){for(i=0;i<n;i++){if(a[i]!=0)j++;if(j==m){printf("%d\\n",a[i]);out++;j=0;a[i]=0;} \/*依次打印退出人的编号*\/ if(i==n-1) br...

有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退 ...
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。假设除去第k个人,则 0, 1, 2, 3,...

C语言编程:有n个人围成一圈,按顺序从1到n编号。从第一个人开始,报到3...
j=(j+1)%n;} for(i=0;i<n;i++){ if(1==a<i>)printf("%d号玩家活到的最后\\n",i+1);} }

C语言有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数...
call_n++;\/\/报数 call_n%=3;\/\/最大为3,到了3就从0开始 if(call_n==0){*p=1;out_n++;}\/\/为0(即3)出局 } p++;if(p==a+N)p=a;\/\/循环转向下一人 } printf("最后剩余者的编号是:%d\\n",p+1-a);}

N个人围成一个圈顺序编号,从第一个人开始报数(从1到M),凡报到M的人退 ...
void Josegh(n){ int i,j,k,s1,w;s1=s;for(i=1;i<=n;i++) \/*给n个人从1到n编号*\/ p[i-1]=i;for(i=n;i>=2;i--){ s1=(s1+m-1)%i; \/*下一个开始报数的人的编号是(s1+m-1)%i*\/ if(s1==0) \/*若s1为0,则说明要开始报数的是最后一个人*\/ s1=i;w=p[s1-...

有N只猴子选大王,选举的办法是:排成一排,从头到尾报数,报到3的倍数(
这个是C语言编写,题目是输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及...

...有n个人围成一圈,顺序排号,从第一个人开始(从1-
{ char student[N];\/\/N个人,1表示未退出,0表示已经退出 int out[N];\/\/退出的人的号码记录 int count = -1;\/\/循环计数 0,1,2 <=> 1-3 int num_out = -1;\/\/退出号码记录的数组的下标 memset(student, 1, sizeof(student));\/\/将所有人状态置为1(未退出)for (int i = 0;...

有n个人围城一圈,顺序排号。从第一个人开始报数(从1报到3),凡报到3...
for(i=0;i<n;i++) \/\/此处的for循环是给这n个人编号:第一个是1,第二个是2,……而且,仍然保持p指向数组num的起始处 (p+i)=i+1;i=0;k=0;m=0;while(m<n-1) \/\/此处的while循环是挑选报3的人退出圈子 { if(*(p+i)!=0) k++; \/\/初始从i=0开始不空则k加一 if(k...

...从第一个人开始报数(从1到3报数),凡报到3的人退出 。。。
n个人围成一圈,按顺序编号,分别为1、2、3..n。(你可以理解成每个人的座号)。然后1号开始,每人依次报号。即 (这里假设n=5)(前面是座号、后面是他报的号)1:1 2:2 3:3(退出)现在只剩下座号为1、2、4、5的人,从3的下一个开始报号 4:1 5:2 1:3(退出)2:1 4:2 5:3...

...成一个圈,编号依次为1~n。从第1号开始报数,报到m的倍数的人离开,一...
int n, m, i, j, no,left;int pp[256];printf("Please input n and m:\\n");scanf("%d,%d”,&n,&m);for(i=0; i<n; i++) pp[i]=i;left=n; no=0;while(left>1){ for(i=0; i<left; i++, no++){ if(no==m){ for(j=i; j<left-1; j++) ...

相似回答