自己用C写了一个约瑟夫问题的程序,,,出现了一点问题
调试没发现问题,但从函数goot()后就运行不了了#include<stdio.h>
void goot(int pi[],int m);
main(){
int person[30];
int n,i,s;
n=30;
printf("请输入循环数:\n");
scanf("%d",&s);
for(i=0;i<n;i++)
person[i]=i+1; //为数组赋初始值
printf("队列原始数据的编号:\n");
for(i=0;i<n;i++)
printf("person[%d]=%d\t",i,person[i]);
printf("\n");
goot(person,s);
}
void goot(int pi[],int m){
int temp,i,t,j,*p,k,r;
k=m;
p=pi;
for(r=0;r<k;r++){
while(temp<7){ //跳过6个数,输出第7个数
temp=0;
if(p==(pi+m)){ //如果到表尾,则将p指向表头
p=pi;
temp=temp+1;
}
else{ //如果未到表尾,则控制变量temp+1,,,指针变量p+1
temp=temp+1;
p=p+1;
}
}
t=*p;
for(i=0;i<m;i++){ //找出输出的是数组中第i个数
if(t==pi[i])
j=i;
}
for(j=i;j<m;j++){ //从第i个数开始后面的数向前移一位
pi[j]=pi[j+1];
}
pi[m]=t; //将抽中的数赋值给数组的最后一个
m--; //将数组的长度缩短一位
}
printf("出队顺序值:\n");
for(i=0;i<m;i++)
printf("pi[%d]=%d\t",i,pi[i-1]);
printf("\n");
}