列表

详情


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;
}

上一题