/*我国古籍记载着 * 294 * 753 * 618 * 这是一个三阶幻方。每行每列以及对角线上的数字相加都相等 * 考虑一个相反问题 * 用1-9的数字填入九宫格使得每行每列对角线上数字和都不相等,搜索所有的三阶反幻方并统计一共有多少种,旋转或镜像算一种*/ package test; public class 反幻方 { static int count=0; static void swap(char[] s,int a,int b){ char temp=s[a]; s[a]=s[b]; s[b]=temp; } public static void dsf(char[] arr,int k,int length){//用k记录当前遍历到的数字位数 if(k==length){//若填入九宫格使得每行每列对角线上数字和都不相等,则count++; if(arr[0]+arr[1]+arr[2]!=arr[3]+arr[4]+arr[5]&&arr[0]+arr[1]+arr[2]!=arr[6]+arr[7]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[3]+arr[0]+arr[6]&&arr[0]+arr[1]+arr[2]!=arr[1]+arr[4]+arr[7]&&arr[0]+arr[1]+arr[2]!=arr[5]+arr[2]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[0]+arr[4]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[2]+arr[4]+arr[6]) if(arr[3]+arr[4]+arr[5]!=arr[6]+arr[7]+arr[8]&&arr[3]+arr[4]+arr[5]!=arr[0]+arr[3]+arr[6]&&arr[3]+arr[4]+arr[5]!=arr[1]+arr[4]+arr[7]&&arr[3]+arr[4]+arr[5]!=arr[2]+arr[8]+arr[5]&&arr[3]+arr[4]+arr[5]!=arr[0]+arr[4]+arr[8]&&arr[3]+arr[4]+arr[5]!=arr[2]+arr[4]+arr[6]) if(arr[6]+arr[7]+arr[8]!=arr[0]+arr[3]+arr[6]&&arr[6]+arr[7]+arr[8]!=arr[1]+arr[4]+arr[7]&&arr[6]+arr[7]+arr[8]!=arr[2]+arr[8]+arr[5]&&arr[6]+arr[7]+arr[8]!=arr[0]+arr[4]+arr[8]&&arr[6]+arr[7]+arr[8]!=arr[2]+arr[4]+arr[6]) if(arr[0]+arr[3]+arr[6]!=arr[1]+arr[4]+arr[7]&&arr[0]+arr[3]+arr[6]!=arr[2]+arr[8]+arr[5]&&arr[0]+arr[3]+arr[6]!=arr[0]+arr[4]+arr[8]&&arr[0]+arr[3]+arr[6]!=arr[2]+arr[4]+arr[6]) if(arr[1]+arr[4]+arr[7]!=arr[2]+arr[8]+arr[5]&&arr[1]+arr[4]+arr[7]!=arr[0]+arr[4]+arr[8]&&arr[1]+arr[4]+arr[7]!=arr[2]+arr[4]+arr[6]) if(arr[2]+arr[5]+arr[8]!=arr[0]+arr[4]+arr[8]&&arr[2]+arr[5]+arr[8]!=arr[2]+arr[4]+arr[6]) if(arr[0]+arr[4]+arr[8]!=arr[2]+arr[4]+arr[6]) count++; return; } for(int i=k;i<=length;i++){//每次递归从当前位数向后递归 swap(arr,i,k); dsf(arr,k+1,length); swap(arr,i,k); } } public static void main(String arg[]){ char[] arr="123456789".toCharArray(); dsf(arr,0,8);//使用数组来表示九宫格,搜索范围从0-8共9个数 System.out.print(count/8);//除去旋转(4)和镜像(2),2*4=8 } }
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(二):用.NET IoT库
· 几个自学项目的通病,别因为它们浪费了时间!
· C#钩子(Hook) 捕获键盘鼠标所有事件 - 5分钟没有操作,自动关闭 Form 窗体
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?