BC161. 大吉大利,今晚吃鸡
描述
糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事就是把a柱的圆盘全部移到c柱,移动的过程中保持小盘在上,大盘在下,且限定圆盘只能够移动到相邻的柱子,即a柱子上的圆盘只能够移动到b,b柱子上的圆盘只能够移动到a或者c,c同理。现在请你设计一个程序,计算所需移动的最小步数, 帮助糖赢得大餐!
输入描述
每一行输出有一个整数n(0<=n<26), 直至文件末尾。输出描述
对于每一组数据,输出一行,输出移动的最小步数M。示例1
输入:
1
输出:
2
C 解法, 执行用时: 1ms, 内存消耗: 296KB, 提交时间: 2022-05-22
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=-1) { int a=1; for(int i=1; i<=n; i++) a*=3; //汉诺塔原来是找规律题 n==1 3-1;n==2 3*3-1; printf("%d\n",a-1); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 312KB, 提交时间: 2022-07-20
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=-1) { int a=1; for(int i=1; i<=n; i++) a*=3; //汉诺塔原来是找规律题 n==1 3-1;n==2 3*3-1; printf("%d\n",a-1); } }
C 解法, 执行用时: 2ms, 内存消耗: 172KB, 提交时间: 2022-05-14
#include<stdio.h> //可以找到一个规律 int main() { int n; while (scanf("%d", &n) != EOF) { int a = 1; for (int i = 1; i <= n; i++) a *= 3; printf("%d\n", a - 1); } }
C 解法, 执行用时: 2ms, 内存消耗: 176KB, 提交时间: 2022-06-18
#include <stdio.h> int count; void Honoi(int n, char a, char b, char c){ if(n == 0) return ; Honoi(n-1, a, b, c); // A(n-1) -> C count++; // A -> B Honoi(n-1, c, b, a); // C(n-1) -> A count++; // B -> C Honoi(n-1, a, b, c); // n-1层问题 } int main(){ int n; while(~scanf("%d", &n)){ count = 0; Honoi(n, 'a', 'b', 'c'); printf("%d\n", count); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 180KB, 提交时间: 2022-06-02
#include<stdio.h> #include<math.h> int mininum(int n) { if (n == 0) return 0; else if (n == 1) return 2; else return 2 * pow(3, n - 1) + mininum(n - 1); } int main() { int n = 0; while (scanf("%d", &n) != EOF) printf("%d\n", mininum(n)); return 0; }