哦不,哦不,哦不,哦不不不不
这个题我早就见过,可惜当年太菜了
这个题分两步,推公式和高精度,可惜我都不会
我对这个题的题意还是理解的不够透彻,根本看不出来为什么要用
看出来了
首先我们可以退出来,b[n] = 2*b[n-1] + 1
所以,我们就运用到了高精度
然后为什么还得用一个函数呢,因为我们需要用一个辅助的柱子来表示移动的过程,这个函数就是用来干这事的
#include#include #include int l,n;//圆盘的个数以及方法数 int a[201],b[201]; using namespace std; void gjc() { int t=0;//剩下的 for(int j=200;j>0;j--) { l=b[j]*2+t;//n等于2n的圆盘,所以乘二,然后加上剩余的 这里记录方案数 b[j]=l%10;//规律 t=l/10; } //s递除,不然结果不变 } //求移动的过程 void gjj() { int t=0; for (int j=200;j>0;j--) { l=a[j]+b[j]+t; a[j]=l%10; t=l/10; } }//同上 int main() { cin>>n;//输入圆盘 b[200]=1;//位数 for(int i=1;i<=n;i++) { gjc(); gjj();//函数判断 } int k=1; while (a[k]==0&&k<200)//判断个数 k++; for (int i=k;i<=200;i++)//模拟200此 printf("%d",a[i]); return 0; }



