有朋友问这个问题,所以用c写了出来,不用链表用数组实现,另外我帮源码打包放上来给需要的人下载:点击下载,由于源码是linux下的用Anjuta写的生成了很多项目文件,只要打开找到"joseph/src/"下面就是源码。
下面代码假设人数为9,从1开始报数,报数为5。具体代码:
#include 'stdio.h'
int main()
{
int n=9; //人数
int k=1; //开始编号
int m=5; //报数
int a[9] = {1,2,3,4,5,6,7,8,9};
int i=1;
int index; //当前报数人的编号的下标
int flag=0; //报数标志
index = (k%m)-1; //第一环报数人的下标
while(i= 9){ //是否大于大约数组
index = index%9;
}
if(a[index+1] != 0){ //检查下一个是否已出列
flag++; //标志位加一
}
index++; //下一个报数 }
}
printf("%d出列\n",a[index]);
a[index] = 0; //出列
while(1 && i>=n){ //检查下一环报数人是否出列
if((index+1) > 9){ //是否大于大约数组
index = index%9;
}
if(a[index+1] != 0){
index=index+1;
break;
}
index++;
}
n--; //减少一人
flag = 0; //还原标志符
}
return (0);
}
最后补充下:代码可能有一点问题,具体我没有长时间调试所以,不过大体算法应该差不多,所以就不多说了,最后上一张图:
update:
更新了下代码,问题调试的时候找到了,原来是死循环了,最后帮google code的代码将不需要的文件删除了。
转载请注明: 本文《C语言数组实现约瑟夫环代码》来源于bstaint的博客
没有评论:
发表评论