1.数字三角形
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
int s[101][101] = { 0 };
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
cin >> s[i][j];
}
}
int max[101][101] = { 0 };
for (int i = 1; i <= n; i++)
{
//初始化,最下面一层的max数组就是三角形最下面一层的值
max[n][i] = s[n][i];
}
for (int i = n - 1; i >= 1; i--)
{
//从倒数第二层向上计算
for (int j = 1; j <= i; j++)
{
//计算第 i 层的每一个点的 max[][]
int one = max[i + 1][j]; //要么向下一层上和它最近的左边走
int two = max[i + 1][j + 1];//要么向下一层上和它最近的右边走
if (one > two)
{
max[i][j] = s[i][j] + one;
}
else
{
max[i][j] = s[i][j] + two;
}
}
}
cout << max[1][1];
return 0;
2.骨牌
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
freopen("domino.in","r",stdin);
freopen("domino.out","w",stdout);
int i,n;
cin>>n;
int a[4],t;
a[1]=1;a[2]=2;a[3]=4;
if(n<=3) cout<<a[n]<<endl;
else
{
for(i=4;i<=n;i++)
{
t=a[1];
a[1]=a[2];
a[2]=a[3];
a[3]=a[1]+a[2]+t;
}
cout<<a[3]<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}
3.走楼梯
代码:
#include<cstdio>
#include<cstring>
int n,flag=1;
int a[5010],b[5010],c[5010];
void Fibonacci()
{
a[1]=1,b[1]=2;//初始化
for(int i=3;i<=n;i++)//从第3个循环
{
for(int j=1;j<=flag;j++)c[j]=a[j]+b[j];//相加
for(int j=1;j<=flag;j++)//进位
{
if(c[j]>9)//大于9才进
{
c[j+1]+=c[j]/10;
c[j]%=10;
if(j+1>flag)ns++;
}
}
for(int j=1;j<=ns;j++)a[j]=b[j];
for(int j=1;j<=ns;j++)b[j]=c[j];
//交换
}
}
int main()
{
freopen("stair.in","r",stdin);
freopen("stair.out","w",stdout);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//清 0
scanf("%d",&n);//输入
if(n<3)
{
printf("%d",n);
return 0;
}
Fibonacci();
for(int i=ns;i>0;i--)printf("%d",b[i]);
//逆序输出
fclose(stdin);
fclose(stdout);
return 0;
}
4.兔子繁殖
//F(N) = F(N-1) + F(N-2) ;
#include <iostream>
using namespace std;
int rab[22][81];
int main()
{
freopen("rabbit.in","r",stdin);
freopen("rabbit.out","w",stdout);
int m=1, d, i, j, count;
cin>>d ;
if(m || d)
{
memset(rab,0,sizeof(rab));
rab[0][0] = 1;
for(j = 1; j <= d; j++)
{
rab[m + 1][j] = rab[m + 1][j - 1] + rab[m][j - 1];
rab[0][j] += rab[m + 1][j];
for(i = m; i > 0; i--)
{
rab[i][j] = rab[i - 1][j - 1];
}
}
for(i = 0, count = 0; i <= m; i++)
count += rab[i][d];
cout<<count<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}