兔子繁衍問題求解(阿里巴巴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': {