汉诺塔V 小鱼儿 2022-05-28 06:37 76阅读 0赞 Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于 发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱 子从下往上的大小仍保持如下关系 : n=m+p+q a1>a2>...>am b1>b2>...>bp c1>c2>...>cq 计算所有会产生的系列总数. Input 包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数 目N<30. Output 对于每组数据,输出移动过程中所有会产生的系列总数。 Sample Input 3 1 3 29 Sample Output 3 27 68630377364883 /*解析: 1.首先,k 号盘子的移动次数只与 k 下面的盘子数有关,而与 k 上面的盘子数无关, 具体原因自己想一下(有问题可以在下方留言),所以,原问题就可以转化为这样: 给定 k 个盘子,最上方的盘子移动了多少次。 2.找规律:假设最上方的盘子编号为 1 。 k==1,移动 1 次 ; k==2,1 移动 2次, 2 移动 1 次; k==3,1 移动 4 次; 2 移动 2 次; 3 移动 1 次; 由此,我们猜测在移动过程中,i 号盘子的移动次数是 i-1 号盘子的两倍(实际上这就是正确的); 则盘子数为 k ,1 号盘子的移动次数为 2^(k-1); 3.得出答案:ans=2^(n-k);*/ #include<stdio.h> #include<math.h> typedef long long ll; int main() { ll T,n,k,m; while(scanf("%lld",&T)!=EOF) { while(T--) { scanf("%lld%lld",&n,&k); ll x=pow(2,n-k); printf("%lld\n",x); } } return 0; }
相关 汉诺塔 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的6 浅浅的花香味﹌/ 2022年08月25日 05:28/ 0 赞/ 233 阅读
相关 汉诺塔 package com.someusefuldesign.demo; /假设有A B C三个柱子移动的顺序为: / public class 妖狐艹你老母/ 2022年08月13日 15:54/ 0 赞/ 218 阅读
相关 汉诺塔 Problem Description 汉诺塔(又称河内塔)问题是印度的一个古老的传说。 开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着 Dear 丶/ 2022年06月17日 05:28/ 0 赞/ 299 阅读
相关 汉诺塔 汉诺塔 Time Limit: 1000MS Memory Limit: 65536KB [Submit][] [Statistic][] Prob 约定不等于承诺〃/ 2022年06月11日 03:24/ 0 赞/ 240 阅读
相关 汉诺塔 \include<stdio.h> void hanoi(int n,char A,char B,char C) \{ if(n==1) printf("Move s 逃离我推掉我的手/ 2022年06月10日 12:57/ 0 赞/ 289 阅读
相关 汉诺塔 汉诺塔 Time Limit: 1000 ms Memory Limit: 65536 KiB [Submit][] [Statistic][] Problem D 怼烎@/ 2022年05月29日 05:58/ 0 赞/ 254 阅读
相关 汉诺塔V Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于 发生错移产生的系列就增加了,这种 小鱼儿/ 2022年05月28日 06:37/ 0 赞/ 77 阅读
相关 汉诺塔 def move(n, a, b, c): if n == 1: \ 如果a只有1盘子 print(a, '-->', c); \ 直接把盘子从a移到c els 迷南。/ 2022年05月18日 22:25/ 0 赞/ 313 阅读
相关 汉诺塔 include <iostream> using namespace std; int main() { void hanno(int 冷不防/ 2021年09月29日 12:14/ 0 赞/ 454 阅读
还没有评论,来说两句吧...