#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
extern int mi(int,int);
extern bool gaishan(vector<int>,int,int);
extern int jh(vector<int>,int,int);
extern int youtong(vector<int>,vector<int>,int);
extern bool chongfu(vector<vector<int> > vvi,vector<int>,int wei,int changdayin);
int main(){
for(;;){
int jinzhi=2;std::cout<<"请输入进制:";std::cin>>jinzhi;
int wei=6;std::cout<<"请输入位数:"; std::cin>>wei;
int changdayin=mi(jinzhi,wei);
//第一个”数组”初始化
vector<int> vi;
for(int i=0;i<wei;i++){vi.push_back(0);}
//定义一个向量的向量
vector<vector<int> > vvi;
vvi.push_back(vi);
vector<int>::iterator vi_iterator;
int number_will_check=1;
int number_checked=0;
ofstream outfile("六十四卦顺序_2.txt",ios_base::app);
if(!outfile)cerr<<"没有地方存储!!!";
else
outfile<<endl<<"进制:"<<jinzhi<<";"<<"位:"<<wei<<";"<<endl;
while(0<number_will_check){//没有到最后,就继续
//在此处加一些“截肢”代码
vi=*vvi.begin();
int chang=vi.size();
int _delet=0;
int i=chang-wei+1;
for(;i<changdayin;i++){
int zt=jh(vi,i,wei);
if(zt==3){vvi.erase(vvi.begin());//加0和加1都不可以
number_will_check--;
_delet=1;
goto lb1;
}
if(zt==2)vi.push_back(0);//加0可以,加1不可以
if(zt==1){vi.push_back(1);}//加1可以,加0不可以
if(zt==0){ //加0和加1都可以
vi.push_back(1);
if(jh(vi,i+1,wei)!=3)
vvi.insert(vvi.begin()+1,vi);
vi.pop_back();
vi.push_back(0);
number_will_check++;
}
}//for
//if(chongfu(vvi,vi,wei,changdayin)){vvi.erase(vvi.begin()+number_checked);_delet=1;}
lb1:if(!_delet){
vvi.erase(vvi.begin());
number_will_check--;
number_checked++;
outfile<<number_checked<<":";
for(int i=0;i<changdayin;i++)outfile<<vi[i];
outfile<<endl;
cout<<"等待检验的:"<<number_will_check<<" ";
cout<<"符合条件的:"<<number_checked<<endl;
}
}//外层while
}//最外层for
}
int mi(int i,int j){
int hehe=1;
for(int k=0;k<j;k++){
hehe*=i;
}
return hehe;
}
//含有相同的“节”就删除
bool gaishan(vector<int> gaishan_vi,int cixu,int wei){
vector<int>::iterator j2;
vector<int>::iterator i=gaishan_vi.begin();
for(int y=0;y<cixu;y++){
vector<int>::iterator j1=i;
i++;
j2=gaishan_vi.begin();
for(int x=0;x<cixu;x++){j2++;}
for(int k=0;k<wei;k++){
if((*j1)!=(*j2))break;
j1++;
j2++;
if(k==(wei-1))return 1;
}
}
return 0;
}
int jh(vector<int> vi,int cixu,int wei){
//加0后的状态
vi.push_back(0);
bool h0=gaishan(vi,cixu,wei);
vi.pop_back();
//加1后的状态
vi.push_back(1);
bool h1=gaishan(vi,cixu,wei);
vi.pop_back();
return(h1*2+h0);
}
运行部分结果
进制:2;位:6;
1:0000001000011000101000111001001011001101001111010101110110111111
2:0000001000011000101000111001001011001101001111011011101010111111
3:0000001000011000101000111001001011001101001111110101011101101111
4:0000001000011000101000111001001011001101001111110110111010101111
5:0000001000011000101000111001001011001101010111010011110110111111
6:0000001000011000101000111001001011001101010111010011111101101111
7:0000001000011000101000111001001011001101010111011011110100111111
8:0000001000011000101000111001001011001101010111011011111101001111
9:0000001000011000101000111001001011001101010111101101110100111111
10:0000001000011000101000111001001011001101010111111011011101001111
11:0000001000011000101000111001001011001101101001111010101110111111
12:0000001000011000101000111001001011001101101001111011101010111111
13:0000001000011000101000111001001011001101101001111110101011101111
14:0000001000011000101000111001001011001101101001111110111010101111
15:0000001000011000101000111001001011001101101010111010011110111111
16:0000001000011000101000111001001011001101101010111010011111101111
17:0000001000011000101000111001001011001101101010111011110100111111
18:0000001000011000101000111001001011001101101010111011111101001111
运行结果有147M
打都打不开,想分别存到几个文件中,但不知道怎么弄