设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。编制函数Josegh()实现此功能
#include<stdio.h>
#include<stdlib.h>
int n,s,m,out,a[100]; //n为所有人数,out为出局的人
void josegh( );
void main()
{
int i;
for (i = 1; i < 100; i++) //定义数组a[100],按顺序赋值1 -3
a[i] = i;
printf ("n = "); scanf ("%d", &n);
printf ("s = "); scanf ("%d", &s);
printf ("m = "); scanf ("%d", &m);
out = s + m -1;
if (out > n)
out = out - n;
printf ("out = %d",a[out]);
n --;
while (out <= n)
a[out] = a[++out];
while (n != 0)
{
printf("\nm = ");
scanf("%d", &m);
josegh ( );
}
system("pause");
}
void josegh ( ) //每当出局一个人,n减1,数组重新排列
{
if (m > n)
m = m - n;
else if (m <= n)
printf ("o = %d",a[m]);
n--;
while (m <= n)
a[m] = a[++m];
}
最后一步,o应该等于2,怎么会是1呢?
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,请问下面的程序哪地方错了?
答案:1 悬赏:70
解决时间 2021-02-19 14:18
- 提问者网友:芷芹
- 2021-02-18 20:09
最佳答案
- 二级知识专家网友:虚伪的现实
- 2021-02-18 20:35
#include<stdio.h>
#include<stdlib.h>
int n,s,m,out,a[100];
void josegh( );
void main()
{
int i;
printf ("n = "); scanf ("%d", &n);
printf ("s = "); scanf ("%d", &s);
printf ("m = "); scanf ("%d", &m);
for (i = 1; i <=n; i++)
a[i] = i;
while (n != 0)
josegh ( );
system("pause");
}
void josegh ( )
{
out = s + m - 1;
while (out > n)
out-= n;
printf ("o = %d\n",a[out]);
n--;
s=out;
while (out <= n)
a[out++] = a[out+1];
}
#include<stdlib.h>
int n,s,m,out,a[100];
void josegh( );
void main()
{
int i;
printf ("n = "); scanf ("%d", &n);
printf ("s = "); scanf ("%d", &s);
printf ("m = "); scanf ("%d", &m);
for (i = 1; i <=n; i++)
a[i] = i;
while (n != 0)
josegh ( );
system("pause");
}
void josegh ( )
{
out = s + m - 1;
while (out > n)
out-= n;
printf ("o = %d\n",a[out]);
n--;
s=out;
while (out <= n)
a[out++] = a[out+1];
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯