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

关于#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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)