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 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题