帮忙改正一下代码,该怎么处理

帮忙改正一下代码
{  
  int current,m,n;
  current=0;
m=3;
n=8;
int a[8]={1,2,3,4,5,6,7,8};
  const int *po[8];
  for(int l=0;l<n;++l){po[l]=&a[l];}
  for(int i=0; i<n-1; ++i){
for(int j=1; j<m; ++j){
while (po[current]==NULL){--j;}
  current=(current+1)%n;
}
while(po[current]==NULL){current=(current+1)%n;}
cout<<a[current]<<endl;
po[current]=NULL;
current=(current+1)%n;
  }
  return 0;
}
这是个约瑟夫问题
循环输出应当是
3
6
1
5
2
8
4
7
但不知道为什么,代码运行后却只输出
3
6
1
谢谢高手能它矫正


------解决方案--------------------
程序怎么写成这样?
看着爽吗??
------解决方案--------------------
LZ抱歉,不是说教什么东西。
就是这个风格让人看着不舒服。
------解决方案--------------------
第1个while用错了,没有循环出口
------解决方案--------------------
第1个while用错了,没有循环出口
把第一个while改成if就可以了
------解决方案--------------------
#include <iostream.h>
int main()
{
int current,m,n;
current=0;
m=3;n=8;
int a[8]={1,2,3,4,5,6,7,8};
const int *po[8];
for(int l=0;l <n;++l)
{
po[l]=&a[l];
}
for(int i=0; i <n-1; ++i)
{

for(int j=1; j <m; ++j)
{
if(po[current]==NULL)//不能用while不然就是一个死循环的.
{
--j;

}
current=(current+1)%n;
}
while(po[current]==NULL)
{
current=(current+1)%n;
}
cout <<a[current] <<endl;
po[current]=NULL;
current=(current+1)%n;
}
return 0;
}
------解决方案--------------------
我也写了一个
C/C++ code


#include <iostream>
using namespace std;
const int N = 100;
int main()
{
    int a[N];
    int *pa[N];
    int m, iCurrent = 0, sum = 0, index = 0;
    cout<<"输入m值"<<endl;
    cin>>m;

    for(int i = 0; i < N; ++i)
    {
        a[i] = i + 1;
        pa[i] = a + i;
    }

    int j = 0;
    while( sum < N )
    {
        for( j = 1; j < m; ++j )
        {
            if( pa[iCurrent] == NULL )
            {
                --j;
                ++sum;
            }
            (++iCurrent) %= N;
        }

        while( NULL == pa[iCurrent] )
        {
            (++iCurrent) %= N;
            ++sum;
        }

        pa[iCurrent] = NULL;
        cout<<a[iCurrent]<<"\t";
        (++iCurrent) %= N;
    }

    return 0;
}

------解决方案--------------------
int main()
{
{
int current,m,n; 
current=0; 
m=3; 
n=8; 
int a[8]={1,2,3,4,5,6,7,8}; 
const int *po[8]; 
for(int l=0;l <n;l++){po[l]=&a[l];} 
for(int i=0; i <n; i++){
for(int j=1; j <m; j++){ 
if(po[current]==NULL){j--;}
current=(current+1)%n; 

while(po[current]==NULL){current=(current+1)%n;} 
cout <<a[current] <<endl; 
po[current]=NULL; 
current=(current+1)%n; 

return 0; 
}
}