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; }