1. 猴子吃桃
【问题描述】
猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
#include <iostream>
using namespace std;
int peach(int n)
{
if (n == )
return ;
else
return * (peach(n + )+);
}
int main()
{
int sum;
sum=peach();
cout << sum << endl;
return ;
}
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[]= {,,};
int main() {
//a上车人数 n共有n个车站
//m最后一站车上的人数
//x第几站开出 int a,n,m,x,i,k=;
cin >> a >> n >> m >> x; if(x==) {
cout << a;
return ;
}
for(i=; i<; i++){
b[i]=b[i-]+b[i-];
}
if(n>){
k=(m-(b[n-]+)*a)/(b[n-]-);
}
cout << (b[x-]-)*k+(b[x-]+)*a;
return ;
}
1.纸的折痕
【问题描述】
将一张长方形的纸对折,可得到一条折痕,继续对折,对折时每次折痕与上次的折痕保持平行,连续对折三次后,可得到7条折痕,那么对折n次,可得到几条折痕?
【输入格式】一个整数n,表示对折的次数。
【输出格式】输出得到折痕的数目。
【样例输入】
3
【样例输出】
7
#include<iostream>
using namespace std;
int main(){
int n, a[]={};
int m = ;
cin >> n;
a[] = ;
for(int i = ; i <= n; i++){
a[i] = a[i-] + m;
m = m * ;
}
cout << a[n] << endl;
return ;
}
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=*m;
for (int i=m+;i<=n;i++)
total+=i;
cout<<total;
return ;
}
3.Catalan数
【问题描述】
Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用h表示,h即为Catalan数。例如五边形有如下五种拆分方案(如下图),故h=5。求对于一个任意的凸n边形相应的h。
【输入样例】
10
【输出样例】
1430
#include <iostream>
using namespace std;
int a[];
int f(int x){
int sum=;
if (a[x]!=){
return a[x];
}else{
for (int i=;i<=x-;i++){
sum=sum+f(i)*f(x-i+);
}
return a[x]=sum;
}
}
int main(){
int n;
a[]=;
a[]=;
cin>>n;
cout<<f(n);
return ;
}