NC201605 Bits
题目
题目描述
Nancy喜欢做游戏!
汉诺塔是一个神奇的游戏,神奇在哪里呢?
给出 根柱子,最开始时 个盘子按照大小被置于最左的柱子。
如果盘子数为偶数,则需要将她们全部移动到最右侧的柱子上,否则将她们移动到中间的柱子上。
那么,Nancy该怎样移动呢?请你输出汉诺塔游戏的过程叭!
输入描述
共一行:一个整数 ,表示最开始 个盘子(编号为 到 )的放置方法。
数据满足:。
输出描述
共 组:每组 行,每行 个字符,用.表示空白区域,用|表示柱子区域,用*表示盘子。组与组之间请输出 个-。
具体输出方式请参看样例进行理解。
示例1
输入
2
输出
................... ...|.....|.....|... ..***....|.....|... .*****...|.....|... ------------------- ................... ...|.....|.....|... ...|.....|.....|... .*****..***....|... ------------------- ................... ...|.....|.....|... ...|.....|.....|... ...|....***..*****. ------------------- ................... ...|.....|.....|... ...|.....|....***.. ...|.....|...*****.
题解
知识点:递归。
难点在输出。用 表示三个塔,用向量模拟塔的圆盘情况,采用后进先出的的操作。再用一个函数输出当前状态即可。
时间复杂度
空间复杂度
代码
#include <bits/stdc++.h> using namespace std; int N, cnt; vector<int> h[3]; void write() { for (int i = 1;i <= 3 * (2 * N + 1) + 4;i++) cout << '.'; cout << '\n'; for (int i = 1;i <= 3 * (2 * N + 1) + 4;i++) { if (i == N + 2 || i == 3 * N + 4 || i == 5 * N + 6) cout << '|'; else cout << '.'; } cout << '\n'; for (int i = N - 1;i >= 0;i--) { for (int j = 1;j <= 3 * (2 * N + 1) + 4;j++) { if (i < h[0].size() && h[0][i] && N + 2 - h[0][i] <= j && j <= N + 2 + h[0][i] || i < h[1].size() && h[1][i] && 3 * N + 4 - h[1][i] <= j && j <= 3 * N + 4 + h[1][i] || i < h[2].size() && h[2][i] && 5 * N + 6 - h[2][i] <= j && j <= 5 * N + 6 + h[2][i] ) cout << '*'; else if (j == N + 2 || j == 3 * N + 4 || j == 5 * N + 6) cout << '|'; else cout << '.'; } cout << '\n'; } } void hanoi(int n, int A, int B, int C) { if (n == 1) { for (int i = 1;i <= 3 * (2 * N + 1) + 4;i++) cout << '-'; cout << '\n'; cnt++; h[C].push_back(h[A].back()); h[A].pop_back(); write(); return; } hanoi(n - 1, A, C, B); cnt++; h[C].push_back(h[A].back()); h[A].pop_back(); for (int i = 1;i <= 3 * (2 * N + 1) + 4;i++) cout << '-'; cout << '\n'; write(); hanoi(n - 1, B, A, C); } int main() { std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> N; for (int i = N;i >= 1;i--) h[0].push_back(i); write(); if (N & 1) hanoi(N, 0, 2, 1); else hanoi(N, 0, 1, 2); return 0; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/16403790.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧