出圈问题
有 N 个人围成一圈参加游戏,游戏的规则是: N个人的编号分别为1、2、……、N,以编号为‘1’的人开始报数,报到M时该人跳出圈子,下一人继续重新报数。按此要求依次输出所有跳出圈子人员的编号。例如:N=6,M=3时,出圈人的序号分别是:3,6,4,2,5
要求:将N定义成符号常量,可以在程序中修改其值。程序允许在键盘上输入M的值,然后将出圈人的序号依次输出。
#include<stdio.h>
#include <stdlib.h>
#define N 6
int main(void)
{ int i,j,m,t=0,a,s;// i,j是循环控制变量,s是数组元素个数的变量
scanf("%d",&m);
s=N;
for (i=0;i<s;i++)
a=i+1;
for (i=0;i<s;i++)
{ t++;
if (t==m)
{printf("%d\t",a);
if (i!=s-1) //如果下标没有指向数组最后一个元素
{for (j=i;j<s-1;j++)
a=a; //数组元素前移覆盖取出的数
i--;
}
else
i=-1;
s--;
t=0;
}
if (i==s-1)//构建无限循环
i=-1;
if (s==0) //退出无限循环
break;
}
system("pause");
return 0;
} 答案应该没错,第一次回复,希望楼主采纳
#define N 6
int func(int m) {
int i, j,
int nextarr; //构建数组,其值为下一个人的位置;
for (i = 0; i < N - 1; ++i) {
nextarr = i + 1;
}
nextarr = 0;
int a = N - 1;
for (i = 0; i< N-1; ++i) {//进行n-1轮,每轮1个人出圈
for (j = 0; j < m - 1; ++j) {
a = nextarr;
}
nextarr = nextarr];
}
return a + 1;
}
int main() {
printf("%d", func(3));
} 楼主能讲下你的程序是如何实现的吗?实在看不懂你的代码哦 大尾巴 发表于 2019-12-19 16:44
答案应该没错,第一次回复,希望楼主采纳
为啥把6换了就不能用了嘞?
核苷酸 发表于 2019-12-21 16:52
为啥把6换了就不能用了嘞?
我这把 6换成 7 或者8都可以啊你把你的发个图给我看下哒
页:
[1]