c++n連環

遞歸版:

#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 <iostream>
#include <memory.h>
using namespace std;

int count = 0;
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 << " ";
}

int main()
{
 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;
 }

遞歸版還有問題,仿手工版沒有問題 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章