C语言:10人围一圈,1到8循环报数,报数为8的出圈到圈中剩一人为止按退出次序输出出圈人原来的号

请用C语言写:10人围一圈,从第1人依次从1到8循环报数,每报数为8的出圈,到圈中只剩一人为止,按退出次序输出出圈人原来的号.

第1个回答  2008-06-18
#include <stdio.h>
int main(void)
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
说明:只要输入N=10,M=8即可满足你的要求 还可以有其他变化 其中n为总人数 M为报数最大值
第2个回答  2008-06-18
可以用结构体链表做,这里用数组处理如下
#include<stdio.h>

main()
{
int a[10];
int i;
int k=0;
int n=0;
for(i=0;i<10;i++)
{
a[i] = i + 1;
}
for(i=0;;i++)
{
if(a[i]!=0)
{
k++;
}
if(k==8)
{
printf("%d ",a[i]);
a[i]=0;
k=0;
n++;
}
if(i==9)
i=0;
if(n==10)
break;
}
}本回答被提问者采纳

C语言:10人围一圈,1到8循环报数,报数为8的出圈到圈中剩一人为止按退出次...
} 说明:只要输入N=10,M=8即可满足你的要求 还可以有其他变化 其中n为总人数 M为报数最大值

C语言问题!10个人围成一个圈!
if(j == 8)\/\/满足退出条件 { printf("%d ", ren[i]);\/\/输出该人 cont++; \/\/退出人数增加 j=0; \/\/重新报数 ren[i]=0;\/\/此人退出 置零 } } if(i==10)\/\/循环报数 { i=0;} if(cont == 10)\/\/人全部退出 结束战斗 { break;} } printf("\\n");} ...

c语言报数问题
现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。设n=100,c=1,m=10.(1)将1到n个人的序号存入一维数组p中;(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第...

1~M个人,围成一个圈,轮流报数,报到S的人出列,按顺序输出出列的人的编 ...
printf("(1为非教徒,0为教徒)\\n");} \/ n, s, m = 30 1 9 出圈次序:9 18 27 6 16 26 7 19 30 12 24 8 22 5 23 11 29 17 10 2 28 25 1 4 15 13 14 3 20 21 Press any key to co...

c语言出圈问题请高人来 解决
我的问题就出来了那倒数第i+1个数以后的就不往前移了吗?这是当时第一个人跳出的时候就将他放在最后一个位置,以就是倒数第一个位置,第二个人跳出,则放在倒数第2个位置,,,第i个跳出的人就放在倒数第i个位置 其他的我就不想看了

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

设有n个人坐一圈并按顺时针方向从1到n编号,
if(s1==0) \/*若s1为0,则说明要开始报数的是最后一个人*\/ s1=(s1+m-1)%i; s1开始的编号;m个后出局;i当前剩余的未出局个数;\/* VC++ 6.0编译通过,不好意思,因为系统原因暂不支持中文注释,代码中为英文...希望能看懂。\/ include <iostream> using namespace std;void Cal_Out_Sort...

报数问题
这道题可以这么理解,转成圈,1-18循环报数,其实转三圈就回到最开始的状态,循环报数了(即和前三圈重复)因为78*3=234人,正好可以整除18。这样一来,这道题不那么难了;1)几个小朋友报过数1?第一圈:4组1-18,1组1-6,报1的小朋友有5个;第二圈:1组7-18,3组1-18,1组1-12 ...

C语言:n人围圈m报数的约瑟夫老题,要求见图片,咋编?
0;} } for(i=1,t=k=0,p=head;k<n;p=p->next,++t)\/\/按题设次序对前n个结点清0 if(p->x && i++%m==0)p->x=0,k++;printf("%d\\n",t%n);\/\/输出最后清0的编号 dellink(head);\/\/释放整个链表 return 0;} else printf("Input error, exit...\\n");return 0;} ...

有n个人围成一圈从1-3报数
n个人按顺序围成一圈(编号为1~n),从第1个人从1开始报数,报到k的人出列,相邻的下个人重新从1开始报数,报到k的人出列,重复这个过程,直到队伍中只有1个人为止,这就是约瑟夫问题。现在给定n和k,你需要返回最后剩下的那个人的编号。二、约瑟夫问题 约瑟夫问题,或称“约瑟夫环”,又名“丢手绢...

相似回答
大家正在搜