问题标题: 酷町堂:汉诺塔

0
0
已解决
许金夫
许金夫
初级天翼
初级天翼

区区汉诺塔我竟然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


0
已采纳
徐子玄
徐子玄
初级光能
初级光能

你的代码在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愉快!!!(其他都没毛病)

望采纳!

0
赵逸凡
赵逸凡
初级启示者
初级启示者

看清知识点:递推,不是递归

0
0
我要回答