帮忙改正一下代码,该怎么处理
帮忙改正一下代码
{
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;
}
------解决方案--------------------
我也写了一个
{
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;
}
}