程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 理解C++程序設計中的抽象理論

理解C++程序設計中的抽象理論

編輯:C++入門知識
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 <<" No." <<a[p] <<" boy've won. "; 
  cin.get(); 
  cin.get(); 
  }
  
  就數組解決來看,程序簡短但效率不高可讀性也不好,此代碼沒有什麼非凡之處主要依靠一個加1取模的方式往返到首位置,形成環鏈:p=(p+1)%num;。 更多內容請看C/C++技術專題  C/C++進階技術文檔  C/C++相關文章專題,或
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved