反幻方 题目
2017-05-13 17:24
239 查看
反幻方
我国古籍很早就记载着
2 9 4
7 5 3
6 1 8
这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。
下面考虑一个相反的问题。
可不可以用 1~9 的数字填入九宫格。
使得:每行每列每个对角线上的数字和都互不相等呢?
这应该能做到。
比如:
9 1 2
8 4 3
7 5 6
你的任务是搜索所有的三阶反幻方。并统计出一共有多少种。
旋转或镜像算同一种。
比如:
9 1 2
8 4 3
7 5 6
7 8 9
5 4 1
6 3 2
2 1 9
3 4 8
6 5 7
等都算作同一种情况。
请提交三阶反幻方一共多少种。这是一个整数,不要填写任何多余内容。
——————————-宝宝是分割线,以下是代码———————————————————-
我国古籍很早就记载着
2 9 4
7 5 3
6 1 8
这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。
下面考虑一个相反的问题。
可不可以用 1~9 的数字填入九宫格。
使得:每行每列每个对角线上的数字和都互不相等呢?
这应该能做到。
比如:
9 1 2
8 4 3
7 5 6
你的任务是搜索所有的三阶反幻方。并统计出一共有多少种。
旋转或镜像算同一种。
比如:
9 1 2
8 4 3
7 5 6
7 8 9
5 4 1
6 3 2
2 1 9
3 4 8
6 5 7
等都算作同一种情况。
请提交三阶反幻方一共多少种。这是一个整数,不要填写任何多余内容。
——————————-宝宝是分割线,以下是代码———————————————————-
答案—————–3120 |
小弟水平有限,方法比较粗略,还望各路大神指教。。。捂住脸(逃 |
#include<stdio.h> int fhuanf[10]={0}; //非幻方 int sum=0; //个数 int xsum[8]={0}; //8条线和 int xsum_ss=0; //线和下标 int is_legal(int xsum[8],int ss) //判断各线和是否存在相等的情况 存在返回0 不存在返回1 { for(int i=0;i<ss;i++) { for(int j=i+1;j<ss;j++) { if(xsum[i]==xsum[j]) return 0; } } return 1; } void create(int n) { if(n==4) { xsum[xsum_ss++]=fhuanf[1]+fhuanf[2]+fhuanf[3]; } if(n==7) { xsum[xsum_ss++]=fhuanf[4]+fhuanf[5]+fhuanf[6]; } if(n==8) { xsum[xsum_ss++]=fhuanf[1]+fhuanf[4]+fhuanf[7]; xsum[xsum_ss++]=fhuanf[3]+fhuanf[5]+fhuanf[7]; } if(n==9) { xsum[xsum_ss++]=fhuanf[2]+fhuanf[5]+fhuanf[8]; } if(n==10) { xsum[xsum_ss++]=fhuanf[7]+fhuanf[8]+fhuanf[9]; xsum[xsum_ss++]=fhuanf[1]+fhuanf[5]+fhuanf[9]; xsum[xsum_ss++]=fhuanf[3]+fhuanf[6]+fhuanf[9]; } if(n>6&&!is_legal(xsum,xsum_ss)) //判断是否合乎要求 { return; } if(n==10) //满足要求 { sum++; return ; } if(n<10) //依次给数组赋值 { for(int i=1;i<10;i++) { int ok=1; for(int j=1;j<n;j++) { if(fhuanf[j]==i) { ok=0;break; } } if(ok) fhuanf =i; else continue; create(n+1); fhuanf =0; if(n==6||n==8||n==3) { xsum_ss--; xsum[xsum_ss]=0; } if(n==7) { xsum_ss-=2; xsum[xsum_ss]=xsum[xsum_ss+1]=0; } if(n==9) { xsum_ss-=3; xsum[xsum_ss]=xsum[xsum_ss+1]=xsum[xsum_ss+2]=0; } } } } int main() { create(1); printf("%d",sum/8); //所有反幻方总数为sum 而每一个矩阵的旋转和镜像有7个 加上本身有8个 所以直接用总数除以8就好了 return 0; }
相关文章推荐
- 关于矩阵求和的常见算法//题目:n阶幻方矩阵验证
- HPUoj题目 1080 做幻方(找规律,格式好坑)
- HDOJ题目分类
- hdu 题目1236 排名
- 解决oj题目内部测试数据解压乱码的问题
- hdoj 2732 Leapin' Lizards 【拆点网路流】 【题目数据坑。。。】
- [LeetCode刷题笔记]Math数学类型题目(三)特殊的数字结构
- 离散题目3
- 常见的链表题目
- hdu 题目分类
- HDOJ题目2516 取石子小游戏(博弈)
- 南阳oj 题目13 Fibonacci数
- 中兴捧月蓝剑之路初赛题目——数房子
- 动态规划题目整合
- poj 题目分类
- [WA]题目1087:约数的个数
- HDOJ 题目1002A + B Problem II (大数)
- 南阳oj 题目62 笨小熊
- 每天几道小题目,幸福生活一辈子(1)
- 题目:初识python,第一个python程序,交互式环境下的输出以及文本编辑器介绍