遞歸版:
#include <iostream>
#include <memory.h>
using namespace std;
bool lianhuan[100];
int count = 0;
void taojie(int n)
{
count++;
if(lianhuan[n])
cout << "解下";
else
cout << "套上";
lianhuan[n] = !lianhuan[n];
cout << n << endl;
}
void jiehuan(int n);
void bianli(int n)
{
for(int i = n - 2; i >= 1; i--)
jiehuan(i);
}
void jiehuan(int n)
{
if(n == 0)
return;
if(n == 1)
{
taojie(n);
return;
}
bianli(n);
taojie(n);
bianli(n);
return;
}
int main()
{
memset(lianhuan, 1, sizeof(lianhuan));
int n;
cin >> n;
bianli(n + 2);
cout << count;
return 0;
}
仿手工版:
#include <memory.h>
using namespace std;
bool data[100];
int bushu(int n)
{
int ans = 0;
for(int i = 1; i <= n; i++)
{
ans *= 2;
if(i % 2 != 0)
ans++;
}
return ans;
}
void taojie(int n)
{
if(data[n] == 1)
cout << "解下";
else
cout << "套上";
data[n] = !data[n];
count++;
cout << n << " ";
}
{
memset(data, 1, sizeof(data));
int n;
cin >> n;
int bu = bushu(n);
while(count < bu)
{
taojie(1);
for(int i = 1; i <= n; i++)
if(data[i])
{
if(i + 1 <= n)
taojie(i + 1);
break;
}
}
cout << endl << count;
return 0;
}