最初的第一印象是和组合数一个性质的题目。所以用了回溯法,结果,你懂的。。。
#include<stdio.h> #include<math.h> void dfs(int n,int d,int num[]); int k=0; int max=0; int main(){ while(scanf("%d",&k)!=EOF){ int num[57]={0}; num[1]=1; dfs(1,1,num); printf("%d ",max); max=0; } return 0; } void dfs(int n,int d,int num[]){ int m; if(n==k){ max++; return ;} for(m=1;m<=k;m++){ if((!num[m])&&((fabs(m-d))<=2)){ num[m]=n+1; dfs(n+1,m,num); num[m]=0; } } }
结果看完解题报告,原来是斐波那契数列。。。。
#include <stdio.h> int main() { int i,f[60],n; f[1]=f[2]=1; f[3]=2; for(i=4;i<56;i++){ f[i]=f[i-1]+f[i-3]+1; } while(scanf("%d",&n)!=EOF){ printf("%d ",f[n]); } return 0; }
各种纠结,不过,开心的是,我居然用搜索写出来了,虽然没过,但是也是有进步的啦
版权声明:本文为博主原创文章,未经博主允许不得转载。