平面切割
題目描述
我們要求的是n條閃電型折線分割平面的最大數目。比如,一條閃電型折線可以將平面分成兩部分,兩條最多可以將平面分成12部分,三條最多可將平面分成31部分,四條最多則可將一個平面分為59部分。
輸入
輸入數據的第一行是一個整數C,表示測試實例的個數,然后是C 行數據,每行包含一個整數n(0<n<=10000),表示折線的數量。
輸出
對于每個測試實例,請輸出平面的最大分割數,每個實例的輸出占一行。
樣例輸入
3
1 2 3
樣例輸出
2
12
31
提示
注意用遞歸的方式找到數學公式哦~
一致的數據比較多,而且題目提示用遞歸數學公式,也就是數學上的遞推公式;
我們來分析下,已知的幾組數組
閃電星折線 為 n=1 時 平面被分成C=2 份
n=2 C=12 情況

有前兩組數據,及幾何圖形,可推知,n每增加1,C的增加跟n正相關,即每次C的增加數量是在前一次C值的基礎上增加特定的值,即前后兩項無倍數關系
下面假設 遞推公式 C[i]=C[i-1];
下面來代入題目中給的 數據
n=2;
C[2]=C[1]=2 而實際C[2]=12; 前者少1*10-0;
n=3;
C[3]=C[2]=12 而實際C[3]=31; 前者少2*10-1;
n=4;
C[4]=C[3]=31 而實際C[4]=59; 前者少3*10-2;
.
.
.
.
很容易得到正確的遞推公式為C[i]=C[i-1]+10*(i-1)-(i-2);
遞推公式出來了,下面貼代碼:
2016-06-05-17:51:21
#include<iostream> using namespace std; int a[10001]; void list() { a[1]=2; for(int i=2;i<=10000;i++) { a[i]=a[i-1]+(i-1)*10-(i-2); } } int main() { int n,N; cin>>N; list(); while(N--) { cin>>n; cout<<a[n]<<endl; } return 0; }
轉載請注明出處,謝謝.Q_Q

浙公網安備 33010602011771號