2007-08-23
四阶幻方
我写的四阶幻方出来了,运行结果正确,7040个的版本。虽然好像还有些问题,不过算了,能跑就可以了,呵呵。
不要输出的话我的p4 3.2G上耗时5s,算还过得去吧 ^_^
以下是程序:
找个时间,来个ruby版的。
ps:最近发现牛人们都很臭屁,臭不可闻啊,唉,风气啊风气。做技术的人都很臭屁,果然啊果然,但愿我以后不会这样。
不要输出的话我的p4 3.2G上耗时5s,算还过得去吧 ^_^
以下是程序:
cpp 代码
- #include
- #include
- using namespace std;
- struct uni
- {
- int a,b,c,d;
- };
- uni can[2065];
- long sum = 0;
- int sum_all = 0;
- void get_all_num()
- {
- for(int i = 1;i <= 16;++i)
- {
- for(int j = 1;j <= 16;++j)
- {
- for(int k = 1; k <= 16; ++k)
- {
- for(int l = 1;l <= 16;++l)
- {
- if(i != j && i != k && i != l && j != k && j != l && k != l)
- if(i + j + k + l == 34)
- {
- can[sum].a = i;
- can[sum].b = j;
- can[sum].c = k;
- can[sum].d = l;
- ++sum;
- }
- }
- }
- }
- }
- }
- void p_rint(const int sq[])
- {
- cout << "i wIll gIvE yOu sOme coLoR 2CC! " << sum_all <
- cout << sq[0] << " " << sq[1] << " " << sq[2] << " " << sq[3] << endl;
- cout << sq[4] << " " << sq[5] << " " << sq[6] << " " << sq[7] << endl;
- cout << sq[8] << " " << sq[9] << " " << sq[10] << " " << sq[11] << endl;
- cout << sq[12] << " " << sq[13] << " " << sq[14] << " " << sq[15] << endl << endl;
- }
- inline bool caca(const int sq[])
- {
- if(sq[0] + sq[4] + sq[8] + sq[12] !=34)
- return false;
- if(sq[2] + sq[6] + sq[10] + sq[14] !=34)
- return false;
- return true;
- }
- inline bool detec_2(const int sq[])
- {
- int km2[17];
- int i,m;
- for(i = 0;i < 16;++i)
- {
- km2[i] = 0;
- }
- for(m = 0;m < 16;++m)
- {
- km2[sq[m]]++;
- if(km2[sq[m]] > 1)
- return false;
- }
- return true;
- }
- inline bool detec_1(const int c1[],const int c2[])
- {
- int km2[17];
- for(int i = 0;i < 16;++i)
- {
- km2[i] = 0;
- }
- km2[c1[0] - 1]++;
- km2[c1[1] - 1]++;
- km2[c1[2] - 1]++;
- km2[c1[3] - 1]++;
- km2[c2[0] - 1]++;
- km2[c2[1] - 1]++;
- km2[c2[2] - 1]++;
- km2[c2[3] - 1]++;
- for(i = 0;i < 16;i++)
- {
- if(km2[i] > 1)
- return false;
- }
- return true;
- }
- void fill_in_line(int c1[],int c2[])
- {
- int sq[16];
- sq[0] = c1[0];
- sq[5] = c1[1];
- sq[10] = c1[2];
- sq[15] = c1[3];
- sq[3] = c2[0];
- sq[6] = c2[1];
- sq[9] = c2[2];
- sq[12] = c2[3];
- for(int k = 1;k <= 16;k++)
- {
- sq[4] = k;
- for(int l = 1;l <= 16;++l)
- {
- sq[1] = l;
- sq[7] = 34 - sq[4] - sq[5] - sq[6];
- sq[11] = 34 - sq[3] - sq[7] - sq[15];
- sq[8] = 34 - sq[9] - sq[10] - sq[11];
- sq[13] = 34 - sq[1] - sq[5] - sq[9];
- sq[14] = 34 - sq[12] - sq[13] - sq[15];
- sq[2] = 34 - sq[0] - sq[1] - sq[3];
- if(sq[7] > 0 && sq[11] > 0 && sq[8] > 0 && sq[13] > 0 && sq[14] > 0 && sq[2] > 0)
- if(sq[7] <= 16 && sq[11] <= 16 && sq[8] <= 16 && sq[13] <= 16 && sq[14] <= 16 && sq[2] <= 16)
- if(detec_2(sq) && caca(sq))
- {
- sum_all++;
- p_rint(sq);
- }
- }
- }
- }
- void fill_in_eight()
- {
- int cse1[4],cse2[4];
- for(int i = 0;i < sum;++i)
- {
- for(int j = 0;j < sum;++j)
- {
- if( i!=j )
- {
- cse1[0] = can[i].a;
- cse1[1] = can[i].b;
- cse1[2] = can[i].c;
- cse1[3] = can[i].d;
- cse2[0] = can[j].a;
- cse2[1] = can[j].b;
- cse2[2] = can[j].c;
- cse2[3] = can[j].d;
- if(detec_1(cse1,cse2))
- {
- fill_in_line(cse1,cse2);
- }
- }
- }
- }
- }
- int main()
- {
- time_t t;
- t = clock();
- get_all_num();
- fill_in_eight();
- cout << "time consumed: " << clock() - t << " ms"<< endl;
- cin.get();
- return 0;
- }
写得比较烂,咳咳咳
找个时间,来个ruby版的。
ps:最近发现牛人们都很臭屁,臭不可闻啊,唉,风气啊风气。做技术的人都很臭屁,果然啊果然,但愿我以后不会这样。
发表评论
- 浏览: 3754 次
- 性别:

- 来自: 深圳

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Rails2之Depot
用上了restful的scaffold最好把admin换成名字空间,下面做pro ...
-- by neodoxy -
Rails2之Depot
要是可以用radrails 来展示就更好了...
-- by antony_jiang -
听说Rails 2.1有个Time Z ...
楼主用的竟然是Mac
-- by Dreamer -
听说Rails 2.1有个Time Z ...
在2.0版本中就已经有了;
-- by PBFox -
听说Rails 2.1有个Time Z ...
确实之前就有了,不过Rails 2.10是Built-in的 多了一些新特性, ...
-- by t0uch






评论排行榜