1. 程式人生 > >兔子繁衍問題求解(阿里巴巴2017線上程式設計題)

兔子繁衍問題求解(阿里巴巴2017線上程式設計題)

題目描述(大概):
在一個荒島,一個獵人帶去了一對剛出生的兔子(一公一母),兔子年齡為n,當兔子年齡大於2歲時每年會生下一對兔子,直到死去的前一年,每年末,當島上兔子大於10對時,獵人會帶走年齡最大的兩對兔子,求y年後島上兔子年齡總和,這裡為簡便記,只求最終的兔子總對數。

思路一:採用面向物件的思想,一個兔子為一個物件,兔子有成員變數:年齡、最大年齡,兔子有成員函式:繁衍函式、死亡函式;如此,維護一個兔子集合,讓其自己一年一年繁衍,即可得到最總兔子總數。
思路二:採用動態規劃的思想,但是又不是個動態規劃的問題,即
狀態變數+狀態轉移方程
這裡,狀態變數可表示為一個數組tuziSet[n+1],陣列下標表示年齡,對應的值表示該年齡對應的兔子總數。tuziSet[0]表示剛出生的兔子總數;
狀態轉移方程:這裡不方便用數學表示式表示,就用文字形容吧;
狀態轉移主要由3個因素引起:
(1)兔子每一年會長一歲,導致年齡為x的兔子對數挪到年齡為x+1的位置;
(2)兔子年齡達到最大值後會死去,即tuziSet[n]清零;
(3)兔子年齡在【3,n-1)之間的兔子,每一對兔子每年繁殖一對兔子;
(4)兔子對數大於10時,獵人會帶走年齡最大的兩對兔子;

以下給出思路2的實現,僅供參考:

#include <iostream>  
#include <algorithm> 
#include<vector>
using namespace std;
int age;
void stateTransfer(vector<int> &tuziSet)
{
    for (int i = age; i >=1; i--)//(1)(2)
    {
        tuziSet[i] = tuziSet[i - 1];
    }
    tuziSet[0] = 0;
    for (int
i = 3; i <= age-1;i++)//(3) { tuziSet[0] += tuziSet[i]; } int sum = 2*tuziSet[0] + tuziSet[1] + tuziSet[2] + tuziSet[age];//總的兔子對數 if (sum>10)//(4)獵人帶走2對兔子 { int i = 0,j=age; while (1) { if (tuziSet[j] > 0) { tuziSet[j]--; i++; } else
j--; if (i==2) { break; } } } } int main() { int n; cin >> n>>age; vector<int> tuziSet(age+1,0);//初始狀態數量為0 tuziSet[0] = 1;//initialize for (int i = 0; i < n;i++) { stateTransfer(tuziSet); } int num = 0; for (auto x:tuziSet) { num += x; } cout << num; return 0; }

相關推薦

兔子繁衍問題求解阿里巴巴2017線上程式設計

題目描述(大概): 在一個荒島,一個獵人帶去了一對剛出生的兔子(一公一母),兔子年齡為n,當兔子年齡大於2歲時每年會生下一對兔子,直到死去的前一年,每年末,當島上兔子大於10對時,獵人會帶走年齡最大的兩對兔子,求y年後島上兔子年齡總和,這裡為簡便記,只求最終的

阿里筆試題2017線上程式設計-- 數串分組

題目 2017年3月阿里線上程式設計題(實習內推) 給定一串數字 判斷是否存在這三個元素,它們將數字串分為四個子串,其中每個子串的數字之和均相同(該3個元素不納入計算) 要求時間複雜度和空間複雜度均不能超過O(n) 實現

2018阿里秋招線上程式設計Java開發工程師

題目:小猴子下山,沿著下山的路有一排桃樹,每棵樹都結了一些桃子。小猴子想摘桃子,但是又一些條件需要遵守,小瘦子只能沿著下山的方向走,不能回頭,每棵樹最多摘一個,而且一旦摘了一棵樹的桃子,就不能再摘比

阿里校招線上程式設計

閒話一下 就在剛剛,有點突然,額。。。我用8分鐘完成了阿里30分鐘的線上程式設計題。。。。 沒想到第一個部落格就是這樣的內容%>_<% 我準備的的是客戶端工程師。線上程式設計題一共30分鐘,只有一道程式設計題。介面上的下一題按鈕,迷惑了我。我想這一題好像不會,就

阿里巴巴2017實習生招聘線上程式設計測驗演算法工程師-機器學習

題目:小明向他的女朋友仙仙求婚,在求婚戒指上刻了一個大大的愛心。仙仙看到愛心想考驗一下小明,出了一道題。方程(x2+y2−1)2−x2y2=0能畫出一個美麗的愛心,現在給定一個點(x,y),其中,X∼N((μ1,σ21),Y∼N((μ2,σ22),這個點在這個愛

【nowcoder】9.5 阿里巴巴2017實習生筆試題

http://www.nowcoder.com/questionTerminal/0cd6af2fd4374df597b49e09302b1a5a - 使用 inline 關鍵字的函式只是使用者希望

阿里巴巴2019線上筆試之一

光明小學的小朋友們要舉行一年一度的接力跑大賽了,但是小朋友們卻遇到了一個難題:設計接力跑大賽的線路,你能幫助他們完成這項工作麼? 光明小學可以抽象成一張有N個節點的圖,每兩點間都有一條道路相連。光明小學的每個班都有M個學生,所以你要為他們設計出一條恰好經過M條邊的路徑。 光明

阿里巴巴2017實習面試分享技術三面+HR面

前言 樓主投遞的崗位是“研發工程師JAVA”,面試期間處於研一階段,且走的內推,這裡建議小夥伴們也儘量走內推,因為機率確實會大很多,畢竟筆試對於很多同學來說真的是不小的一個挑戰。 目前樓主已有幸拿到offer,下面簡單分享一下自己的面試過程,希望對大家有所幫

7-27 兔子繁衍問題15 分

stdio.h void bottom class 小兔子 bsp nac color 假如兔子都不死 一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以

2018阿里巴巴線上程式設計--將陣列分割為和相等的三段

看到一道面試題: 給定一個int型的陣列,找出兩個位置,使得陣列被分為三段,每段之和相等,問存不存在這樣的兩個位置,注意兩個位置上的數字不屬於任何一段。要求時間複雜度為O(n)。 用雙迴圈的話,可以很容易的做到,但是時間複雜度是O(n2),不滿足要求。可以利用字首和、字尾和的概念來解決。 用J

習題4-11 兔子繁衍問題 15 point(s)

一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對? 輸入格式: 輸入在一行中給出一個不超過10000的正整數N。 輸出格式: 在一行中輸出兔子總數達到N最

JSON資料解析:Gson谷歌和fastjson阿里巴巴的異同點

Gson和fastjson分別為谷歌和阿里巴巴對JSON資料進行處理封裝的jar包 Gson(谷歌)和fastjson(阿里巴巴)兩者異同點: 相同點:都是根據JSON資料建立相應的類 不同點

習題4-11 兔子繁衍問題 15 分遞迴演算法陣列演算法

一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對? 輸入格式: 輸入在一行中給出一個不超過10000的正整數N。 輸出格式: 在一行中輸出兔子總數達到N對

2018面試總結阿里巴巴螞蟻金服、餓了麼、人人車等

前言 今年跳槽換工作,一共面試了8家公司,拿到了6個offer,其中包括阿里巴巴螞蟻金服(外派杭州)、餓了麼、人人車等公司,總體來說還算是順利,因為也沒面的特別多,想把今年的面試情況總結一下,給自己做一個記錄,也希望給其他人一點幫助。 面試記錄 星雲鏈

最新大型網際網路公司面試阿里巴巴、京東、美團、滴滴試題

大型網際網路公司面試(阿里巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕鬆過關,拿到offer,但是有一些是來詢問我答案的。我特意整理了一下,有很多問題不是靠幾句話能講清楚,所以乾脆找朋友錄製了一些視訊,用來回來這些面試題。很多問題其實答案很簡單,但是背

7-10 兔子繁衍問題15 分

一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對? 輸入格式: 輸入在一行中給出一個不超過10000的正整數N。 輸出格式: 在一行中輸出兔子總數達到N最少需要的月數。 輸

初識dubbo阿里巴巴分散式服務框架

為什麼需要分散式服務架構 架構的發展史 單一應用: 使用者請求數量不多,將所有功能部署在一起也能滿足響應速度,此時用於簡化增刪查改工作量的資料訪問架構是關鍵。 垂直應用架構 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干

2017今日頭條網招線上程式設計部分

第一題 P 為 給 定 的 二 維 平 面 整 數 點 集 。 定 義 P 中 某 點 如 果 × 滿 足 P 中 任 意 點 都 不 在 × 的 右 上 方 區 域 內 ( 橫 縱 座標 都 大 於 × ) , 則 稱 其 為 “ 最 大 的 ” 。 求 出

硬幣遊戲阿里巴巴筆試題

硬幣遊戲:連續扔硬幣,直到某一人獲勝。A獲勝條件是先正後反,B獲勝是出現連續兩次反面,問AB遊戲時A獲勝概率是()? A、 1/6 B、 1/4 C、1/3 D、1/2 E、2/3 F、3/4 **這是一個非常有意思的問題,因為如果是連續仍的,第一

2019屆阿里巴巴模擬線上程式設計

題目 實現一個 css選擇器 示例: // 參考規則 const rules = { 'a': { height: 0, width: 10 }, '#page .content a': {