美文网首页
c语言求解循环汉诺塔问题

c语言求解循环汉诺塔问题

作者: 一路向后 | 来源:发表于2022-05-22 21:24 被阅读0次

    1.问题描述

    描述
    Eli最近迷上了汉诺塔。她玩了传统汉诺塔后突发奇想,发明了一种新的汉诺塔玩法。
    有A、B、C三个柱子顺时针放置,移动的次序为A仅可以到B,B仅可以到C、C仅可以到A。即只可顺时针移动,不可逆时针移动。当然,汉诺塔的普适规则是适用的:每次移动后,大金片必须在小金片的下面。
    现在A柱子上有n\n 个金片。Eli想知道,她把这些全部移动到B或C,分别要多少次操作?
    输入描述:
    一个正整数n\n 。(n<10^7)(n<10
    7
    )
    输出描述:
    两个整数,分别代表A移到B和A移到C的最少操作数。由于该数可能过大,你需要对1000000007取模。

    2.源码实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
            int n = -1;
        int a = 2, b = 1;
        int c = 2, d = 1;
        int i;
    
            scanf("%d", &n);
    
            if(n <= 0)
            {
            return -1;
            }
    
        for(i=1; i<n; i++)
        {
            c = ((2 * a) % 1000000007 + (b + 2) % 1000000007) % 1000000007;
            d = ((2 * a) % 1000000007 + 1) % 1000000007;
    
            a = c;
            b = d;
        }
    
        printf("%d, %d\n", b, a);
    
            return 0;
    }
    

    3.编译源码

    $ gcc -o test tes.c
    

    4.运行及其结果

    $ ./test
    2
    5, 7
    

    相关文章

      网友评论

          本文标题:c语言求解循环汉诺塔问题

          本文链接:https://www.haomeiwen.com/subject/kxllprtx.html