首頁 - 網(wǎng)校 - 萬題庫 - 直播 - 雄鷹網(wǎng)校 - 團(tuán)購 - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 -
首頁網(wǎng)校萬題庫直播雄鷹網(wǎng)校團(tuán)購書城模考論壇實(shí)用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓(xùn)
專升本
自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點(diǎn)日語
職稱英語
口譯筆譯
申碩英語
零起點(diǎn)韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點(diǎn)英語
托?荚
托業(yè)考試
零起點(diǎn)法語
雅思考試
成人英語三級
零起點(diǎn)德語
等級考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會計(jì)職稱
法律顧問
ACCA考試
初級會計(jì)職稱
資產(chǎn)評估師
高級經(jīng)濟(jì)師
注冊會計(jì)師
高級會計(jì)師
美國注冊會計(jì)師
審計(jì)師考試
國際內(nèi)審師
注冊稅務(wù)師
理財(cái)規(guī)劃師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價(jià)員考試
注冊計(jì)量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評價(jià)師
土地登記代理人
寶寶起名
繽紛校園
實(shí)用文檔
入黨申請
英語學(xué)習(xí)
思想?yún)R報(bào)
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(6)

考試吧整理“2015年軟件水平考試程序員精選題(6)”供考生參考,更多軟件水平考試資訊和備考資料請關(guān)注考試吧軟件水平考試網(wǎng)。

  現(xiàn)在的問題轉(zhuǎn)換為求矩陣{1, 1, 1, 0}的乘方。如果簡單第從0開始循環(huán),n次方將需要n次運(yùn)算,并不比前面的方法要快。但我們可以考慮乘方的如下性質(zhì):

  / an/2*an/2 n為偶數(shù)時(shí)

  an=

  \ a(n-1)/2*a(n-1)/2 n為奇數(shù)時(shí)

  要求得n次方,我們先求得n/2次方,再把n/2的結(jié)果平方一下。如果把求n次方的問題看成一個(gè)大問題,把求n/2看成一個(gè)較小的問題。這種把大問題分解成一個(gè)或多個(gè)小問題的思路我們稱之為分治法。這樣求n次方就只需要logn次運(yùn)算了。

  實(shí)現(xiàn)這種方式時(shí),首先需要定義一個(gè)2×2的矩陣,并且定義好矩陣的乘法以及乘方運(yùn)算。當(dāng)這些運(yùn)算定義好了之后,剩下的事情就變得非常簡單。完整的實(shí)現(xiàn)代碼如下所示。

  #include

  ///////////////////////////////////////////////////////////////////////

  // A 2 by 2 matrix

  ///////////////////////////////////////////////////////////////////////

  struct Matrix2By2

  {

  Matrix2By2

  (

  long long m00 = 0,

  long long m01 = 0,

  long long m10 = 0,

  long long m11 = 0

  )

  :m_00(m00), m_01(m01), m_10(m10), m_11(m11)

  {

  }

  long long m_00;

  long long m_01;

  long long m_10;

  long long m_11;

  };

  ///////////////////////////////////////////////////////////////////////

  // Multiply two matrices

  // Input: matrix1 - the first matrix

  // matrix2 - the second matrix

  //Output: the production of two matrices

  ///////////////////////////////////////////////////////////////////////

  Matrix2By2 MatrixMultiply

  (

  const Matrix2By2& matrix1,

  const Matrix2By2& matrix2

  )

  {

  return Matrix2By2(

  matrix1.m_00 * matrix2.m_00 + matrix1.m_01 * matrix2.m_10,

  matrix1.m_00 * matrix2.m_01 + matrix1.m_01 * matrix2.m_11,

  matrix1.m_10 * matrix2.m_00 + matrix1.m_11 * matrix2.m_10,

  matrix1.m_10 * matrix2.m_01 + matrix1.m_11 * matrix2.m_11);

  }

  ///////////////////////////////////////////////////////////////////////

  // The nth power of matrix

  // 1 1

  // 1 0

  ///////////////////////////////////////////////////////////////////////

  Matrix2By2 MatrixPower(unsigned int n)

  {

  assert(n > 0);

  Matrix2By2 matrix;

  if(n == 1)

  {

  matrix = Matrix2By2(1, 1, 1, 0);

  }

  else if(n % 2 == 0)

  {

  matrix = MatrixPower(n / 2);

  matrix = MatrixMultiply(matrix, matrix);

  }

  else if(n % 2 == 1)

  {

  matrix = MatrixPower((n - 1) / 2);

  matrix = MatrixMultiply(matrix, matrix);

  matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0));

  }

  return matrix;

  }

  ///////////////////////////////////////////////////////////////////////

  // Calculate the nth item of Fibonacci Series using devide and conquer

  ///////////////////////////////////////////////////////////////////////

  long long Fibonacci_Solution3(unsigned int n)

  {

  int result[2] = {0, 1};

  if(n < 2)

  return result[n];

  Matrix2By2 PowerNMinus2 = MatrixPower(n - 1);

  return PowerNMinus2.m_00;

  }

上一頁  1 2 3 4 

  相關(guān)推薦:

  2015年軟考信息技術(shù)處理員考前知識點(diǎn)總結(jié)匯總

  2015年軟件水平考試《程序員》提高練習(xí)題匯總

  2015軟件水平考試《程序員》知識點(diǎn)總結(jié)匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網(wǎng) All Rights Reserved 
中國科學(xué)院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
學(xué)
一次通關(guān)技巧