从面向结构到面向对象-----josephus问题(方法二:结构的应用)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

今天看了一下josephus问题,突然有点想写些东西的冲动,结合自己的部份思想,于是便写了这几篇帖子。因为有几篇代码有点长,就分开发吧。如果对你有什么帮助的话,本人胜感欣慰。也许你会说,这个问题好多书上都有代码,但本人诣在于用不同的方法写出,让初学者体会一下从面向结构到面向对象的不同之处;同时你也可以看看我写的和一些书中的不同之处。如果你是个大虾,大可一笑了之,或赐教一番。

josephus问题:几个小孩围成一圈,从任意一个小孩间隔m顺时针方向数起,每数到第m个小孩时,该小孩就离开。最后一个剩下的就为胜利者。第几个为胜利者?

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//方法二:结构的应用

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <iostream.h>

#include <iomanip.h>

struct jose

{

int code;

jose *next;

};

void mian()

{

int numOfBoys,interval;

cout<<"Please input the number of boys,"

<<endl

<<"interval of counting:";

cin>>numOfBoys>>interval;

jose *pJose=new jose[numOfBoys];

jose *pCurrent=pJose;

int itemsInLine=0;

for(int i=1;i<=numOfBoys;i++)

{

pCurrent->next=pJose+i%numOfBoys;

pCurrent->code=i;

pCurrent=pCurrent->next;

if(itemsInLine++%10==0)

cout<<endl;

cout<<setw(4)<<i;

}

itemsInLine=0;

int numOfCount;

cout<<"please input the number of count:"

<<endl;

while(1)

{

cin>>numOfCount;

if(0<numOfCount&&numOfCount<=numOfBoys)

break;

}

jose *pivot;

pCurrent=&pJose[numOfCount-1];

while(pCurrent->next!=pCurrent)

{

for(int j=0;j<interval;j++)

{

pivot=pCurrent;

pCurrent=pivot->next;

}

if(itemsInLine++%10==0)

cout<<endl;

cout<<setw(4)<<pCurrent->next;

pivot->next =pCurrent->next;

pCurrent=pivot;

}

cout<<endl

<<"the winner is:"

<<pCurrent->code

<<endl;

delete []pJose;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航