理解C 程式设计中的抽象理论

2008-02-23 05:24:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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;




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C STL编程轻松入门

下一篇: C 编写的ATM自动取款机模拟程式分析

热门词条
热门标签