杭电1995

这道题是道找规律的题

其实无论给什么盘号,你都可以将该盘号看成这个盘子以下这一堆盘子中的第一个盘子,比如总共5个盘子,要你算第2个盘子的移动次数,其实你可以看成总共4个盘子,要你算第1个盘子的移动次数

这个时候,所有问题就都可统一概括为汉诺塔问题中第一个盘子的移动次数,我当时只列了两个盘子和三个盘子的情况就发现,只有两个盘子时,第一个盘子移动次数为2,三个盘子时第1个盘子的移动次数为4,我就猜测第一个盘子移动次数应该为2的总盘子数减一的次方,然后题目刚好给了60这样一个很大的测试数据供我测试,验证后发现这个确实满足这个规律

#include<stdio.h>
#include<math.h>

int main(void){
    long long count = 0;
    int t;
    int n, k;
    scanf("%d", &t);
    while(t--){
        scanf("%d%d", &n, &k);
        count = pow(2, n-k);
        printf("%lld ", count);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/ssNiper/p/11138009.html