队列实现2024春晚刘谦魔术
作者:
daaijunqi
,
2024-02-10 17:10:17
,
所有人可见
,
阅读 78
#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int q[N] = {2, 7, 6, 5, 2, 7, 6, 5}, hh, tt = 7, n;
void print() {
for (int i = hh; i <= tt; i++) {
cout << q[i] << " ";
}
cout << endl;
}
int main() {
cout << "原序列为: " << endl;
print();
cout << "名字有几个字? ";
cin >> n;
for (int i = 0; i < n; i++) {
q[++tt] = q[hh++];
}
print();
// 前面三个插到中间
int mid = hh + 3 + tt >> 1;
for (int j = 0; j < 3; j++) {
for (int i = tt; i >= mid; i--) {
q[i + 1] = q[i];
}
tt++;
}
for (int i = 0; i < 3; i++) {
q[mid + i] = q[hh + i];
}
hh += 3;
cout << "前面三个插到中间之后: " << endl;
print();
// 把第一张藏在res中
int res = q[hh];
hh++;
cout << "把第一张藏起来之后: " << endl;
print();
// 南方1张 北方2张 不确定拿3张 插到中间
cout << "哪个地区? 南方1, 北方2, 不确定3 ";
cin >> n;
mid = hh + n + tt >> 1;
for (int j = 0; j < n; j++) {
for (int i = tt; i >= mid; i--) {
q[i + 1] = q[i];
}
tt++;
}
for (int i = 0; i < n; i++) {
q[mid + i] = q[hh + i];
}
hh += n;
cout << "地区插到中间之后: " << endl;
print();
// 男生1 女生2 扔出去
cout << "男生还是女生? 男生1, 女生2 ";
cin >> n;
for (int i = 0; i < n; i++) {
hh++;
}
cout << "性别扔出去之后: " << endl;
print();
// 见证奇迹的时刻, 7张放到后面
for (int i = 0; i < n; i++) {
q[++tt] = q[hh++];
}
cout << "见证奇迹的时刻: " << endl;
print();
// 好运留下来, 烦恼丢出去 第一张放下面, 第二张丢掉
while (tt - hh > 1) {
q[++tt] = q[hh++];
hh++;
}
cout << "好运留下来, 烦恼丢出去之后: " << endl;
cout << q[hh];
return 0;
}