1. 猴子吃桃
【問題描述】
猴子第一天摘了若干個桃子,當即吃了一半,還不解饞,又多吃了一個;第二天,吃剩下的桃子的一半,還不過癮,又多吃了一個;以后每天都吃前一天剩下的一半多一個,到第10天想再吃時,只剩下一個桃子了。問第一天共摘了多少個桃子?
#include <iostream> using namespace std; int peach(int n) { if (n == 10) return 1; else return 2 * (peach(n + 1)+1); } int main() { int sum; sum=peach(1); cout << sum << endl; return 0; }
2.乘火車
【問題描述】
火車從始發站(稱為第1站)開出,在始發站上車的人數為a,然后到達第2站,在第2站有人上、下車,但上、下車的人數相同,因此在第2站開出時(即在到達第3站之前)車上的人數保持為a人。從第3站起(包括第3站)上、下車的人數有一定規律:上車的人數都是前兩站上車人數之和,而下車人數等於上一站上車人數,一直到終點站的前一站(第n-1站),都滿足此規律。現給出的條件是:共有n個車站,始發站上車的人數為a,最后一站下車的人數是m(全部下車)。試問第x站開出時車上的人數是多少?
【輸入格式】: —行四個整數a, n, m和x (中間用空格隔開)
0 <= a <= 10, 3 <= x < n <= 15, 0 <= m <= 10000。
【輸出格式】 —行一個整數(從x站開出時車上的人數)
【樣例輸入】
4 6 32 4
【樣例輸出】
18
#include <iostream> using namespace std; int b[20]= {0,1,1}; int main() { //a上車人數 n共有n個車站 //m最后一站車上的人數 //x第幾站開出 int a,n,m,x,i,k=0; cin >> a >> n >> m >> x; if(x==1) { cout << a; return 0; } for(i=3; i<20; i++){ b[i]=b[i-1]+b[i-2]; } if(n>4){ k=(m-(b[n-3]+1)*a)/(b[n-2]-1); } cout << (b[x-1]-1)*k+(b[x-2]+1)*a; return 0; }
1.紙的折痕
【問題描述】
將一張長方形的紙對折,可得到一條折痕,繼續對折,對折時每次折痕與上次的折痕保持平行,連續對折三次后,可得到7條折痕,那么對折n次,可得到幾條折痕?
【輸入格式】一個整數n,表示對折的次數。
【輸出格式】輸出得到折痕的數目。
【樣例輸入】
3
【樣例輸出】
7
#include<iostream> using namespace std; int main(){ int n, a[100]={0}; int m = 2; cin >> n; a[1] = 1; for(int i = 2; i <= n; i++){ a[i] = a[i-1] + m; m = m * 2; } cout << a[n] << endl; return 0; }
2.平面分割
【問題描述】
同一平面內有n(n≤500)條直線,已知其中p(p≥2)條直線相交於同一點,則這n條直線最多能將平面分割成多少個不同的區域?
【輸入格式】
兩個整數n(n≤500)和p(2≤p≤n)。
【輸出格式】
一個正整數,代表最多分割成的區域數目。
【輸入樣例】
12 5
【輸出樣例】
73
#include<iostream> using namespace std; int main() { int n,m; cin>>n>>m; int total=2*m; for (int i=m+1;i<=n;i++) total+=i; cout<<total; return 0; }
3.Catalan數
【問題描述】
Catalan數首先是由Euler在精確計算對凸n邊形的不同的對角三角形剖分的個數問題時得到的,它經常出現在組合計數問題中。
問題的提出:在一個凸n邊形中,通過不相交於n邊形內部的對角線,把n邊形拆分成若干三角形,不同的拆分數目用hn表示,hn即為Catalan數。例如五邊形有如下五種拆分方案(如下圖),故h5=5。求對於一個任意的凸n邊形相應的hn。
【輸入樣例】
10
【輸出樣例】
1430
#include <iostream> using namespace std; int a[100]; int f(int x){ int sum=0; if (a[x]!=0){ return a[x]; }else{ for (int i=2;i<=x-1;i++){ sum=sum+f(i)*f(x-i+1); } return a[x]=sum; } } int main(){ int n; a[2]=1; a[3]=1; cin>>n; cout<<f(n); return 0; }