KTFinn 2023-04-17 21:05 采纳率: 45.5%
浏览 34
已结题

关于#c++#的问题:c++编程

img


#include <iostream>
#include <cmath>
using namespace std;

void hanoi(int n, char a, char b, char c, int &ab, int &ac, int &ba, int &bc, int &ca, int &cb) {
    if (n == 1) {
        if (a == 'A' && c == 'B') ab++;
        else if (a == 'A' && c == 'C') ac++;
        else if (a == 'B' && c == 'A') ba++;
        else if (a == 'B' && c == 'C') bc++;
        else if (a == 'C' && c == 'A') ca++;
        else if (a == 'C' && c == 'B') cb++;
        return;
    }
    hanoi(n-1, a, c, b, ab, ac, ba, bc, ca, cb);
    if (a == 'A' && c == 'B') ab++;
    else if (a == 'A' && c == 'C') ac++;
    else if (a == 'B' && c == 'A') ba++;
    else if (a == 'B' && c == 'C') bc++;
    else if (a == 'C' && c == 'A') ca++;
    else if (a == 'C' && c == 'B') cb++;
    hanoi(n-1, b, a, c, ab, ac, ba, bc, ca, cb);
}

int main() {
    int n;
    cin >> n;
    int ab = 0, ac = 0, ba = 0, bc = 0, ca = 0, cb = 0;
    hanoi(n, 'A', 'B', 'C', ab, ac, ba, bc, ca, cb);
    printf("%d\n%d\n%d\n%d\n%d\n%d",ab,ac,ba,bc,ca,cb);
    return 0;
}

img

代码运行超时,时间复杂度为O(n^3);
没有想法了,有谁能帮帮我。

  • 写回答

3条回答 默认 最新

  • 语言-逆行者 2023-04-17 23:53
    关注

    基于new Bing的编写:
    这里使用了数组 move 来记录每种移动方式出现的次数,通过移动指针来定位数组中的位置。在函数 hanoi 中,通过传递指向 move 数组的指针,可以减少内存占用和读写操作的次数,提高代码效率。同时,使用位运算来进行数字的比较和计算,减少程序运行时间。最终输出六种移动方式出现的次数即可。

    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void hanoi(int n, int* move) {
        if (n == 1) {
            move[0]++;
            return;
        }
        hanoi(n-1, move);
        move[0]++;
        hanoi(n-1, move+((1<<n)-1));
    }
    
    int main() {
        int n, cnt = 1;
        cin >> n;
        for (int i = 2; i <= n; i++) {
            cnt = (cnt << 1) + 1;
        }
        int* move = new int[cnt]();
        hanoi(n, move);
        printf("%d\n%d\n%d\n%d\n%d\n%d", move[1], move[2], move[3], move[4], move[5], move[6]);
        delete[] move;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题