家纺加盟连锁店:C语言编程

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 11:34:41
21个人,围成一圈,从第一人开始按顺序报号1,2,3,4,5,凡报到5的人退出,问最后留下的人是原来的第几号
281421652

参看贴吧相关链接吧:http://post.baidu.com/f?kz=91037201
把#define N 100
#define M 10
换成#define N 21
#define M 5
即可

#define m 21
#define n 5
struct person
{ int number;
int nextp;
}link[m+1];
main()
{ int i,count,h;
for(i=1;i<=m,i++)
{ if(i==m)
link[j].nextp=1;
else
link[i].nextp=1;
link[i].number=1;
}
printf("");
count=0;
h=m;
printf("出圈成员及顺序:");
while(count<m-1)
{ i=0;
while(i<>n)
{ h=link[h].nextp;
if(link[h].number)
i++;
}
printf("%6d",link[h].number);
link[h].number=0;
count++;
}
printf(" 最后的成员是 ");
for(i=1;i<=m;i++)
if(link[i].number)
printf("%6d",link[i].number);
}

约瑟夫问题:
void josephas(int n,int m){
int t,i,j,p[Max];
t=0;
for(i=0;i<n;i++)
p[i]=i+1;
for(i=n;i>=1;i--){
t=(t+m-1)%i;
printf("%4d",p[t]);
for(j=t+1;j<i;j++)
p[j-1]=p[j];
}
printf("\n");
}
void main(){
int m,n;
scanf("%d%d",&m,&n);
josephus(m,n);
}

约瑟夫问题,建立一个指针链表就可以了