Problem B: 切面條
]Description
一根高筋拉麪,中間切一刀,可以得到2根麪條。
如果先對摺1次,中間切一刀,可以得到3根麪條。
如果連續對摺2次,中間切一刀,可以得到5根麪條。
那麼,連續對摺10次,中間切一刀,會得到多少麪條呢?
Input
包含多組數據,首先輸入T,表示有T組數據.每個數據一行,是對摺的次數。
Output
每行一組數據,輸出得到的麪條數。
Sample Input
3 0 1 2
Sample Output
2 3 5
HINT
#include <iostream> #include <cmath> using namespace std; int main() { int n,i,m,sum; cin>>m; for(i=0;i<m;i++) { while(cin>>n) { if(n==0)//折0次時,有兩根麪條 sum=2; else sum=pow(2,n)+1;//當n>0時sum等於2的N次方加一; cout<<sum<<endl; } } return 0; } //////////////////////////////// //拿一根繩子模擬一下,就很清晰了! /////////////////////////////// //解析、、、、、、、、//在兩部分中,沒有原始的兩端的一頭視爲左邊 /* 當n==0 sum=2;
麪條有兩部分,左邊 1 根,右邊 1 根 當n==1 sum=3;
左邊 1 根,右邊 2 根
當n==2 sum=5;
左邊 2 根,右邊 3 根
~~~~~每連續對摺一次,左邊部分的麪條數翻倍
當n==3 sum=9;
左邊 4 根,右邊 5 根
~~~~~因爲右端有原始的兩頭,所以要比左邊多一根
當n==4 sum=17;
左邊 8 根,右邊 9 根
... ...
以此類推
即可判斷當連續折n次時, 左邊 pow(2,n-1)根,右邊 9 根
兩端加起來即可得出sum=pow(2,n)+1; 當n==0時,其實也符合sum=pow(2,n)+1;
這樣寫只是爲了便於理解;
*/