Josephus问题:设有n个人围坐在一个圆桌周围,现在第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,如此重复直到所有的人全部出列为止。
我的程序:
#include<stdio.h>
void deletlist(int p[],int n,int m);
void main()
{
int n,s,m,p[n],q[n],i,j,* t;
printf("数组有多长?:");
scanf("%d",&n);
printf("从第几开始报数?第几个出列?");
scanf("%d %d",&s,&m);
printf("请输入各个元素:");
for(i=0;i<n;i++)
{scanf("%d ",&p[i]);} /*将所需操作的数据输入,准备操作*/
t=&p[s-1];i=0;j=0; /*指针先指向开始位置*/
if(i==3)
{ deletlist(p,n,m);q[j]=p[m-1];j++;} /*数到4时,删除第4个元素,并把第4个元素赋给数组q*/
else
if(t=&p[n-1]) /*如果指到最后一个,马上指回*/
t=&p[0];
else
t++;
i++ ;
for(i=0;i<j-1;i++)
printf("%d",q[i]);
}
void deletlist(int p[],int n,int m) /*删除函数*/
{
int j;
if(m>n||m<1) printf("无此元素!");
else{
for(j=m;j<=n-1;j++)
p[j]=p[j+1];
}
n--;
}