理解C++程序设计中的抽象理论

王朝学院·作者佚名  2011-12-09
窄屏简体版  字體:   |    |    |  超大  

josephus问题是c++中的一个经典题目,在正式开始学习之前我们先回顾一下如何利用数组和结构体来解决josephus问题,最后我们再看一下如何利用面向对象的抽象理念进行解决此问题的程序设计,相互对比,找出效率最高,最轻易理解,最方便维护的程序来,说明利用面向对象的抽象理念进行程序设计的好处。

josephus问题其实就是一个游戏,一群小孩围成一个圈,设置一个数,这个数是个小于小孩总数大于0的一个整数,从第一个小孩开始报数,当其中一个小孩报到你设置的那个数的时候离开那个圈,这样一来反复报下去,直到只剩下最后一个小孩的时候那个小孩就是胜利者,写程序来找出这个小孩。

以下是数组方法:

由于数组的限制我们必须预先假设好有多少个小孩,离开的小孩他自身设置为0来标记离开状态。

代码如下:

C++ 代码

//程序作者:管宁

//所有稿件均有版权,如要转载,请务必闻名出处和作者

#include <iostream>

using namespace std;

void main()

{

const int num=10;

int interval;

int a[num];

for(int i=0; i<num; i++)

{

a[i]=i+1;

}

cout <<"please input the interval: ";

cin >>interval;

for(int i=0; i<num; i++)

{

cout <<a[i] <<",";

}

cout <<endl;

int k=1;

int p=-1;

while(1)

{

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

{

p=(p+1)%num;

if(a[p]!=0)

{

j++;

}

}

if(k==num)

{

break;

}

cout<<a[p]<<",";

a[p]=0;

k++;

}

cout <<"\nNo." <<a[p] <<" boy've won.\n";

cin.get();

cin.get();

}

就数组解决来看,程序简短但效率不高可读性也不好,此代码没有什么非凡之处主要依靠一个加1取模的方式往返到首位置,形成环链:p=(p+1)%num;。

更多内容请看C/C++技术专题 C/C++进阶技术文档 C/C++相关文章专题,或

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