改进程序
c++吧
全部回复
仅看楼主
level 1
无相痞子 楼主
每一卦是一个6位的二进制,把64卦排成一列,使满足下面的条件:第1卦的后5位与第2卦的前5位相同;第2卦的后5位与第3卦的前5位相同;............第63卦的后5位与第64卦的前5位相同;第64卦的后5位与第1卦的前5位相同;找到所有满足这个条件的排列。#include
#include
#include
#include
#include
#include
#include
using namespace std;using boost::lexical_cast;bool jh(vector
,int,int,int);int mi(int i,int j){ if (j==0) return 1; else return i*mi(i,j-1); };//易卦串—类 class yiguachuan{ private: int _jinzhi,_wei,_chang; int _num_checked; int _howMany_will_check; int _howMany_checked; vector
> _vvi; ofstream outfile; public: yiguachuan(); bool xunzhao(); void out2File(); int jixufou(){ return _howMany_will_check; } };yiguachuan::yiguachuan(){ _howMany_checked=0; _howMany_will_check=1; cout<<"enter jinzhi and wei:"; cin>>_jinzhi>>_wei; string file_name= "jinzhi"+ lexical_cast
(_jinzhi)+ "wei"+ lexical_cast
(_wei)+ "说明"+ ".txt"; outfile.open(file_name.c_str(),ios_base::app); outfile<<"进制:"<<_jinzhi<<";"<<"位:"<<_wei<<";"<
vi; for(int i=0;i<_wei;++i){vi.push_back(0);} _vvi.push_back(vi); };bool yiguachuan::xunzhao(){ vector
vi=*_vvi.begin(); int chang=vi.size(); for(int i=chang-_wei+1;i<_chang;i++){ for(int i_jinzhi=_jinzhi-1;i_jinzhi>0;--i_jinzhi){ if(!jh(vi,i,_wei,i_jinzhi)) { vi.push_back(i_jinzhi); _vvi.insert(_vvi.begin()+1,vi); ++_howMany_will_check; vi.pop_back(); } } if(jh(vi,i,_wei,0)){_vvi.erase(_vvi.begin()); --_howMany_will_check;return false ;} else { vi.push_back(0);
2008年12月25日 13点12分 1
level 1
无相痞子 楼主
} } return true; } ;void yiguachuan::out2File(){ if(_howMany_checked%2048==0){ outfile.close(); string file_name= "jinzhi"+ lexical_cast
(_jinzhi)+ "wei"+ lexical_cast
(_wei)+ "第"+ lexical_cast
(_howMany_checked/2048)+ ".txt"; outfile.open(file_name.c_str(),ios_base::app); outfile<<"进制:"<<_jinzhi<<";"<<" 位:"<<_wei<<";"<
::iterator vitr=(*_vvi.begin()).begin(); vitr<(*_vvi.begin()).end(); ++vitr){ outfile<<*vitr; } outfile<
0) if(yc.xunzhao())yc.out2File(); } }bool jh(vector
vi,int cixu,int wei,int _houjia){ vector
_vi(wei-1); copy(vi.begin()+cixu,vi.end(),_vi.begin()); _vi.push_back(_houjia); return (search(vi.begin(),vi.end(),_vi.begin(),_vi.end())!=vi.end()); }部分结果:2位2进制:1个3位2进制:2个4位2进制:16个5位2进制:2048个2位3进制:24个3位3进制: 373248 个2位4进制: 20736 个八卦中:每一卦是一个3位的二进制,把8卦排成一列,使满足下面的条件:第1卦的后2位与第2卦的前2位相同;第2卦的后2位与第3卦的前2位相同;............第7卦的后2位与第8卦的前2位相同;第8卦的后2位与第1卦的前2位相同;找到所有满足这个条件的排列。进制:2; 位:3;1:00010111 表示 000、001、010、101、011、111、110、100;2:00011101 表示 000、001、011、111、110、101、010、100;进制:2; 位:4;1:00001001101011112:00001001111010113:00001010011011114:000010100111101
15:00001011
001111016:00001011010011117:00001011110011018:00001011110100119:000011001011110110:000011010010111111:000011010111100112:000011011110010113:000011110010110114:0000111101001011
15:00001111
0101100116:0000111101100101
2008年12月25日 13点12分 2
1