1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,1.\x05设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 17:51:55
1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,1.\x05设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编

1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,1.\x05设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编
1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,
1.\x05设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m+1个)又从容不迫开始报数,数到m的人便是第二个出列的人.如此继续下去直到最后一个人出列为止.要求输出这个出列的顺序.

1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,1.\x05设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编
#include
#define N 10 //定义个数
#define C 3 //定义报数
int main()
{
int a[N];
int i,j,count;
//初始化数组
for(i=0;i{
a[i]=i+1;
}
count=N;//计数器
//循环处理前N-1个编号,每次查找出,将计数器递减,直到为1
printf("依次出局:\n");
for(i=0,j=0;count>1;)
{
if(a[i%N]!=0)//如果此数不为0,代表没有出局
{
if(j==C-1)//累加到报数个
{
i=i%N;//循环取编号
printf("%d ",a[i]);//输出
a[i]=0; //置0,代表出局
j=0; //置j=0,重新计数
count--; //计数器减一
while(a[i]==0)//寻找下一个没有出局的编号
{
i++;
i=i%N;//循环取编号
}
continue;//直接执行下一个外循环
}
else//否则累加报数个数
j++;
}
i++;
}
//处理最后一个
printf("\n最后一个:%d\n",a[i]);//输出
getchar();
return 0;
}
看看吧理解一下,吧这个看懂了 也不知道 这个是不是你要的啊,这个好像不是从某个位置报数,而是从第一个人保的啊

动脑筋,自己想,我是老师

第一出列:m+(k-1) =(m-1)+k
第二出列:m+m+(k-1)-1-1=2m+k-2-1=2(m-1)+k-1
以此类推得出:
第x出列:x(m-1)+k-(x-1)=x(m-2)+k+1