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