数学実験を組み合わせて--逆シーケンスから配列を構築する
前のブログと
アルゴリズム:組み合わせ数学中国語第4版機械工業出版社P 59
アルゴリズム:組み合わせ数学中国語第4版機械工業出版社P 59
//////////////////////////////////////////////
// //
// Project Name: converse //
// //
// File Name: converse.h //
// //
// Author: Victor Zhang //
// //
// ID: 21*****92 //
// //
// Create Date: March 30. 2009 //
// //
//////////////////////////////////////////////
#include <fstream>
#ifndef CONVERSE_H
#define CONVERSE_H
#define MAXLEN 90000
class Converse
{
private:
int data[MAXLEN][2];
int count;
public:
Converse(int = 0);
~Converse()
{
int i = 0;
count = 0;
for (i = 0; i < MAXLEN; i++)
{
data[i][1] = data[i][0] = 0;
};
};
void Initialize(int = 0);
void print();
void process();
};
#endif
//////////////////////////////////////////////
// //
// Project Name: converse //
// //
// File Name: converse.cpp //
// //
// Author: Victor Zhang //
// //
// ID: 21*****92 //
// //
// Create Date: March 30. 2009 //
// //
//////////////////////////////////////////////
#include <iostream>
#include <fstream>
using namespace std;
#include "converse.h"
Converse::Converse(int n)
{
this->Initialize(n);
};
void Converse::Initialize(int n)
{
if (!(n)) n = 0;
for (int i = 0; i < MAXLEN; i++)
{
if (i < n)
this->data[i][1] = this->data[i][0] = 0;
else
this->data[i][1] = this->data[i][0] = -1;
};
this->count = n;
};
void Converse::process()
{
fstream file ("con_data.txt", ios::out);
if (!file) cout<<"Error in creating data file(con_data.txt).";
int i = 0;
int j = 0;
int tmp = 0;
while (1)
{
for (i = 0; i < (this->count); i++)
{
tmp = 0;
j = (1 + this->data[i][1]);
while (j)
{
if (this->data[tmp][0] == 0) j--;
tmp++;
};
tmp--;
this->data[tmp][0] = (i + 1);
};
//print
if (!file)
{
}
else
{
if (!(this->count)) file<<"<Empty>";
else
{
for (int i = 0; i < this->count; i++)
file<<this->data[i][0]<<" ";
};
file<<endl;
};
this->print();
//~print
//change
for (i = 0; i < this->count; i++)
this->data[i][0] = 0;
i = 0;
while ((this->data[i][1] >= (this->count - i -1)) && i < this->count)
{
this->data[i][1] = -1;
i++;
};
if (this->data[i][1] == -1) return;
this->data[i][1] += 1;
i--;
while (i >= 0)
{
this->data[i][1] = 0;
i--;
};
};
//~change
file.close();
};
void Converse::print()
{
if (!(this->count)) cout<<"<Empty>";
else
{
for (int i = 0; i < this->count; i++)
cout<<this->data[i][0]<<" ";
};
cout<<endl;
};
//////////////////////////////////////////////
// //
// Project Name: converse //
// //
// File Name: main.cpp //
// //
// Author: Victor Zhang //
// //
// ID: 21*****92 //
// //
// Create Date: March 30. 2009 //
// //
//////////////////////////////////////////////
#include <iostream>
using namespace std;
#include "converse.h"
void main()
{
cout<<"Please input a number(Max 90000):";
int i;
cin>>i;
if (i > 90000) i = 90000;
Converse a(i);
a.process();
};