文章
8
粉丝
140
获赞
20
访问
26.1k
我们根据它1*1为单位,那么则有两个1*1可以合并为一个1*2,三个1*1可以合并成一个1*3的方块的角度,我们可以得出以后类似的递推关系式,而且做这种一般规律题目我们都要想到借鉴我们的“老祖宗”——斐波那契数列
同样是可以理解成抽象数据模型:再加进新的下一个方块之前,首先会保留原始的状态数量为基线,新的方块则作为一个1*1的方块进行插入;那么根据题意,一共只有三种方块形式:1*1、1*2、1*3;那么接下来就插入的方块就和前一个方块组成一个新的1*2方块看作整体,那么剩余方块就是n-2,进行新的组合添加进之前的基数之中,以此类推·······于是就得到了递推式:第n个方块的组合数就是前三个已经得到的数组之和,那么以后碰到可以整合相容的题目,都可以用这种思路进行解析,然后敲写代码,所以只要知道了数列逻辑,那么写出代码也就是轻而易举的事情了
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int a[105]={0,1,2,4};
while(scanf("%d",&n)!=0){
for(int i=4;i<=n;i++){
a[i]=a[i-1]+a[i-2]+a[i-3];
}
if(n==0)break;
else printf("%d\n",a[n]);
}
}
登录后发布评论
暂无评论,来抢沙发