约瑟夫循环问题
假设41个人围成一圈,其中有m个你的朋友不想死掉,从第一个开始报数,第3个将被杀掉。为了保护自己和m个朋友,现在编写程序,求出如何安排自己和m个朋友的初始位置。
2015-10-26 21:52
2015-10-26 22:31
2015-11-02 22:12
2015-11-02 22:21
2015-11-03 10:17
程序代码:#include <stdio.h>
#define N 41
#define M 5
int main( void )
{
int list[N];
for( int i=0; i!=N; ++i )
list[i] = (i+1)%N;
for( int i=0, j=0; j!=(N-M); i=list[list[i]], ++j )
{
int the3rd = list[ list[i] ];
list[ list[i] ] = list[the3rd];
list[the3rd] = -1;
}
for( int i=0; i!=N; ++i )
{
if( list[i] == -1 )
printf( " _" );
else
printf( " %d", i );
}
return 0;
}输出为
2015-11-03 10:45
有问题,明显不对。
2015-11-09 21:57