# 九连环## 题目描述九连环是我国的传统民间智力玩具总共 $9$ 个环互相连接。一些环在框柄上一些不在。我们称把某个环从框柄上取下为 off 操作把环放到框柄上为 on 操作。第 $1$ 个环可以在任何时候取下或放上。对于大于 $1$ 的整数 $n$必须恰好第 $n-1$ 个环在框柄上编号小于 $n-1$ 的环都不在框柄上才可以被取下或放上。例如需要放上第 $5$ 个环那么得先保证第 $123$
#include <iostream>
#include <vector>
using namespace std;
// 定义一个全局变量,用于存储操作过程
vector<pair<int, string>> process;
// 递归函数,将第n个环放到框柄上
void putOn(int n) {
// 如果n等于1,直接将环放到框柄上
if (n == 1) {
process.push_back(make_pair(n, "on"));
return;
}
// 先将前n-1个环放到框柄上
putOn(n - 1);
// 将第n个环放到框柄上
process.push_back(make_pair(n, "on"));
// 再将前n-1个环取下
putOff(n - 1);
}
// 递归函数,将第n个环取下
void putOff(int n) {
// 如果n等于1,直接将环取下
if (n == 1) {
process.push_back(make_pair(n, "off"));
return;
}
// 先将前n-1个环取下
putOff(n - 1);
// 再将第n个环取下
process.push_back(make_pair(n, "off"));
// 再将前n-1个环放回框柄上
putOn(n - 1);
}
int main() {
int n;
cin >> n;
// 将第n个环放到框柄上
putOn(n);
// 输出操作过程
for (auto p : process) {
cout << p.first << " " << p.second << endl;
}
return 0;
}
``
原文地址: http://www.cveoy.top/t/topic/iS6f 著作权归作者所有。请勿转载和采集!