首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家来帮小弟我看看这个简单的有关问题!

2012-02-05 
大家来帮我看看这个简单的问题!!帮我看看啊,这个程序出错在哪,就是n个人围成一圈,顺序排号,从第一个人开始

大家来帮我看看这个简单的问题!!
帮我看看啊,这个程序出错在哪,就是n个人围成一圈,顺序排号,从第一个人开始报数,(从1~3),凡报到3的人退出圈。问最后的留下的人原来排在几号?
#include   <iostream>
using   namespace   std;
int   main()
{
int   a[50],*p,m,i=0,k=0,n;
cin> > n;
p=a;
for(i=0;i <n;i++)
*(p+i)=i+1;
for(m=0;m <n-1;)
{
if(*(p+i)!=0)
k++;
if(k==3)
{
*(p+i)=0;
m++;
k=0;
}
i++;
if(i==n)
i=0;
}
for(i=0;i <n;i++)
if(*(p+i)!=0)
cout < <*(p+i);
return   0;
}

[解决办法]
约色夫循环
int Josephus(int people,int passes)
{
list <int> the_list;
list <int> ::iterator iter,next;

//construct the list
for(int i=1; i <= people; ++i)
{
the_list.push_back(i);
}

//play the game
for( iter=the_list.begin(); people-- != 1; iter=next )
{
for( int i=0; i <passes; ++i)
{
++iter; //advance
if( iter == the_list.end() ) //if past last player the go to first
{
iter=the_list.begin();
}
}
next=iter; //maintain next node ,for player who is after removed player
++next;
the_list.erase(iter); //removed player

if( next == the_list.end() )
{
next=the_list.begin();
}
}

return *iter;
}

热点排行