拼拼樂會議中心是一個N×N 的超大型可分割式會議中心。每一個1×1 的空間都可以用隔板隔開,因此該會議中心最多可以有n2 個獨立的1×1 會議室,如要較大的會議室,則需將隔板拿掉使得二或更多個相鄰的1×1 空間可以合併使用。
會議中心最多可分隔成169 個1×1 小會議室,最少則全部合併成為一個13×13 的會議室每間1×1 ,會議室皆以其二維平面座標為編號。
選定一個1×1 會議室並給予編號 (0),相鄰的上、下、左、右會議室編號則依序為 (0, 1), (0, -1), (-1, 0), (0, 1)。
會議中心外租會議室時,必須按照下列規則,組成合乎需求的會議室。一開始先以編號為(0, 0) 的空間供租用,如果空間不足,則依序向右方、上方、左方、下方的空間合併成為較大的會議室。每次擴充時,新加入的空間必須為正方形且該邊長必須與相鄰的擴充前會議室邊長相同,如此才能確保合併後的會議室一定是四方形。
第一次擴充租用空間時,右邊編號為 (1, 0) 的會議室空間會被跟編號為 (0) 的會議室合併。
第二次擴充時,在 (0, 0), (1, 0) 上方的四個(2×2 正方形)小會議室會被合併進來。
第三次擴充時,在 (0,0) ~ (0, 3) 左邊的 9 個 (3×3 正方形)小會議室會被合併進來。
第四次擴充時,在 (-3,0) ~ (1,0) 下方的 25 個 (5×5 正方形)小會議室會被合併進來。
第五次擴充時,在 (0,-5) ~ (0,2) 右方的 64 個 (8×8 正方形)小會議室會被合併進來。
後續的擴充則依此類推。
現在,若給定一個n 的值,請計算第n 次擴充時的正方形會議室的邊長。
輸入檔只有一個整數n, n≦45。(連續輸入)
請輸出第n次擴充時的正方形會議室的邊長。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n = 0;
vector<int> v_area;
while(cin >> n){
v_area.push_back(-1);
v_area.push_back(1);
v_area.push_back(2);
if (n > 2) {
for (int i = 3; i <= n; i++) {
v_area.push_back(v_area[i - 2] + v_area[i - 1]);
}
cout << v_area.back() << endl;
}
else {
cout << n << endl;
}
v_area.clear();
}
return 0;
}
APCS
C++