初级天翼
区区汉诺塔我竟然WA70
2926 汉诺塔经验值:100
题目描述 Description
给定 A 、 B 、 C 三根足够长的细柱,在 A 柱上放有 2n 个中间有孔的圆盘,共有 n 个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为 n=3 的情形)。
现要将这些圆盘移到 C 柱上,在移动过程中可放在 B 柱上暂存。要求:
(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%50% 的数据, 1 \le n \le 251≤n≤25
对于 100%100% 的数据, 1 \le n \le 2001≤n≤200
【提示】
设法建立 A_nA
n
与 A_{n-1}A
n−1
的递推关系式。
#include <bits/stdc++.h>
using namespace std;
long long f(int n){
if(n==0)return 0;
return 2*f(n-1)+1;
}
int main(){
int n;
cin>>n;
cout<<2*f(n);
return 0;
}
HELP
初级光能
你的代码在3332这题完全可以AC,但这题不行!
That because
3332
对于50%的数据,1≤n≤25
对于100%的数据,1≤n≤63
but 2926
对于 50%50% 的数据, 1 \le n \le 251≤n≤25
对于 100%100% 的数据, 1 \le n \le 2001≤n≤200
乱码太多,数据是这样的:
对于 50% 的数据, 1≤n≤25
对于 100% 的数据, 1≤n≤200 <--(看这个)太大了……
long long也存不下!
给你推荐一个超长整形变量——unsigned long long!
long long f(int n)变为unsigned long long f(int n)
AC愉快!!!(其他都没毛病)
望采纳!