C语言数组实现约瑟夫环代码

有朋友问这个问题,所以用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的代码将不需要的文件删除了。

没有评论: