昆虫繁殖
题目描述:科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月 产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵 长成成虫后的第一个月不产卵(过x个月产卵),问过z个月以后,共有成虫多少对? 0≤x≤20,1≤y≤20,X≤z≤50 输入: x,y,z的数值。 输出:过z个月以后,共有成虫对数。
输入复制
1 2 8
输出复制
37
#include<bits/stdc++.h>
using namespace std;
long long a[100010]={0};
long long b[100010]={0};
long long c[100010]={0};
int main()
{a[1]=1;int x,y,z;cin>>x>>y>>z;for(int i=2;i<=z+1;i++){if(i-x<0)b[i]=0;else b[i]=a[i-x]*y;c[i]=b[i-1];a[i]=a[i-1]+c[i-1];}cout<<a[z+1];return 0;
}
踩方格
题目描述:有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b、走过的格子立即塌陷无法再走第二次;
c、只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法 只要有一步不一样,即被认为是不同的方案。输入: 允许在方格上行走的步数n(n≤20)。 输出: 计算出的方案数量。
输入复制
2
输出复制
7
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;cin>>n;int a[110]={0};a[1]=3;a[2]=7;for(int i=3;i<=n;i++){a[i]=a[i-1]*2+a[i-2];}cout<<a[n];return 0;
}
判断整除
题目描述:一个给定的正整数序列,在每个数之前都插入+ 号或− 号后计算它们的和。
比如序列:1、2、4 共有8 种可能的序列:
(+1) + (+2) + (+4) = 7
(+1) + (+2) + (-4) = -1
(+1) + (-2) + (+4) = 3
(+1) + (-2) + (-4) = -5
(-1) + (+2) + (+4) = 5
(-1) + (+2) + (-4) = -3
(-1) + (-2) + (+4) = 1
(-1) + (-2) + (-4) = -7
所有结果中至少有一个可被整数k 整除,我们则称此正整数序列可被k 整除。
例如上述序列可以被3、5、7 整除,而不能被2、4、6、8…… 整除。
注意:0、−3、−6、−9…… 都可以认为是3的倍数。
输入:输入的第一行包含两个数:N和K。输出:如果这个正整数序列能被K整除,则输出YES,否则输出NO。(注意:都是大写字母)
输入复制
3 2
1 2 4
输出复制
NO
#include<bits/stdc++.h>
using namespace std;
void func(int,int);
int a[110];
int b[110];
int n,k;
int v;
int main()
{cin>>n>>k;v=1;for(int i=0;i<n;i++){cin>>a[i];}func(0,0);for(int i=1;i<v;i++){if(b[i]%k==0){cout<<"YES";return 0;}}cout<<"NO";return 0;
}
void func(int s,int sum)
{int x=a[s];int y=a[s]-a[s]*2;if(s==n-1){if(v%2==0){sum=sum+y;b[v]=sum;v++;return;}else{sum=sum+x;b[v]=sum;v++;return;}}func(s+1,sum+x);func(s+1,sum+y);
}
移动路线
题目描述:X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1), 则右上角方格的坐标为(m,n)。 小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤 了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格 中,蚂蚁从左下角的方格中移动到右上角的方格中,每步移动一个方格。 蚂蚁始终在方格矩阵内移动,请计算出不同的移动路线的数目。 对于1行1列的方格矩阵,蚂蚁原地移动,移动路线数为1;对于1行2列 (或2行1列)的方格矩阵,蚂蚁只需一次向右(或向上)移动,移动路 线数也为1……对于一个2行3列的方格矩阵,如下图所示:
(2,1) (2,2) (2,3)
(1,1) (1,2) (1,3)
蚂蚁共有3种移动路线:
路线1:
(1,1) → (1,2) → (1,3) → (2,3)
路线2:
(1,1) → (1,2) → (2,2) → (2,3)
路线3:
(1,1) → (2,1) → (2,2) → (2,3)
输入 输入只有一行 包括两个整数m和n(0 < m+n ≤ 20), 代表方格矩阵的行数和列数,m、n之间用 空格隔开。 输出 输出只有一行,为不同的移动路线的数目。
输入复制
2 3
输出样例
3
#include<bits/stdc++.h>
using namespace std;
int main()
{int n,m;cin>>n>>m;int a[110][110]={0};for(int i=0;i<n;i++)a[i][0]=1;for(int i=0;i<m;i++)a[n-1][i]=1;for(int i=n-2;i>=0;i--){for(int j=1;j<m;j++){a[i][j]=a[i][j-1]+a[i+1][j];}}cout<<a[0][m-1];return 0;
}