新手启示者
题目描述 Description
给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意:这两个圆盘是不加区分的。(下图为n=3的情形)。
现在需要将这些圆盘移动到C柱上,但是移动过程中需要满足以下条件:
(1) 每次只能移动一个圆盘;
(2) A,B,C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。
输入描述 Input Description
一个正整数n,表示在A柱上放有2n个圆盘。
输出描述 Output Description
一个正整数, 为完成上述任务所需的最少移动次数An。
样例输入 Sample Input
【输入样例1】 1 【输入样例2】 2
样例输出 Sample Output
【输出样例1】 2 【输出样例2】 6
数据范围及提示 Data Size & Hint
对于50%的数据,1 ≤n ≤50;
对于100%的数据,1 ≤n ≤100;
提示:设法建立An与An−1的递推关系式。
结果原本看起来100%的正确率,结果输出错误......
汪宇航在2021-02-10 14:27:18追加了内容
const int MAXN=100005; int A[MAXN],B[MAXN],C[MAXN],ANS[MAXN],LEN_A,LEN_B,LEN_ANS; void Read(int *A,int &LEN){ string cur; cin>>cur; LEN=cur.length(); for(int i=0;i<LEN;i++){ A[i]=cur[i]-48; } reverse(A,A+LEN); } int main(){ Read(A,LEN_A); Read(B,LEN_B); LEN_ANS=max(LEN_A,LEN_B); for(int i=0;i<=LEN_ANS;i++){ ANS[i]=A[i]+B[i]+C[i]; if(ANS[i]>9){ C[i+1]=ANS[i]/10,ANS[i]-=10; } } while(ANS[LEN_ANS]>0){ LEN_ANS++; } for(int i=LEN_ANS-1;i>=0;i--){ cout<<ANS[i]; } return 0; }
是这样么?
(有点乱)
刚刚打错了
中级启示者
因为这题数据很大,必须用高精,否则WA
递推边界 f[1]="1"; //f数组是string类型
递推式
循环2至n{
f[i]=Plus(f[i-1],f[i-1]);
f[i]=Plus(f[i],"1");
}
最后输出 Plus(f[n],f[n])
之后就是Plus函数了,学了高精度加法就会讲到,这里就不说了