您的位置:首页 > 编程语言 > C语言/C++

用c语言一位数组实现约瑟夫环

2012-05-17 20:34 351 查看
用一位整形数组简单的实现约瑟夫环的问题,每一次出列了一个人就把后面的人往前移动,总的人数也做减1操作。把出列的人放到另一个整形数组当中,具体的代码实现如下面的代码:

#include <stdio.h>

int Joseput( int a[],int k,int m,int num )

{

int i,j,t,g,y;

int temp;

j=0;

int b[9]={0};//用一个整形数组b用来保存出列人的编号;

t=k+m-2;

b[j]=a[t];//先选出第一个人放在b[0];

for(g=t;g<num-1;g++)/*把出列的位子用后面的人给占据依次到最后一个*/

{

a[g]=a[g+1];

}

num--;//总数减一

for(i=num,j=1;i>1&&j<9;i--,j++)//i保存总的人数,j表示b数组的下标

{

t=t+m-1;//下一个出列人在原数组的下标

t=t%i;//预防下标大于总数,就对总数取余

b[j]=a[t];

for(g=t;g<i;g++)//把出列的位子用后面的人给占据依次到最后一个

{

a[g]=a[g+1];

}

}

b[j]=a[0];//把最后剩下的元素放到b数组的最后一位;

for(i=0;i<num+1;i++)

{

printf("%d\t",b[i]);

}

}

int main()

{

int a[]={1,2,3,4,5,6,7,8,9};

Joseput(a,1,5,sizeof(a)/sizeof(a[0]));

return 0;

}

以上代码输出结果是:5 1 7 4 3 6 9 2 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: