急求:非链表的约瑟夫环问题代码及解释?(三级数据库的答案看不太懂)

来源:百度知道 编辑:UC知道 时间:2024/05/29 10:02:14
这就是数据库的原题给的答案!本人看不大懂,求高人注释指点!
最初:
N是总人数
m是报m的人出列
s=1/*从s个人开始报数*/
for(i=0;i<N;i++)
p[i]=i+1;

void TX()
{int i=1,j=0;k,s,t,cnt=0;
s=s-1;
while(cnt<N-1)
{i++;
s++;
if(s>N-cnt-1) s=0;
if(i/m==0)
{t=p[s];
i=1;
k=s;
while(k<N-cnt)
p[k++]=p[k+1];
p[N-cnt-1]=t;
if(s==N-cnt-1)s=0;
cnt++;
}
}
}

/*
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
圈子,问最后留下的是原来第几号的那位。
*/
#include <stdio.h>

#define nmax 50
int main(void)
{
int i, k, m, n, num[nmax], *p;
printf("please input the total of numbers:");
scanf("%d", &n);
p = num;
for(i = 0; i < n; i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m < n - 1)
{
if(*(p+i) != 0)
k++;
if(k == 3)
{
*(p+i) = 0;
k = 0;
m++;
}
i++;
if(i == n)
i = 0;
}
while(*p == 0)
p++;
printf("%d is left\n", *p);
}
你看这个题是否有些类似