**
七星填数
**
七星填数
如图【图1.png】所示。
在七角星的14个节点上填入1~14 的数字,不重复,不遗漏。
要求每条直线上的四个数字之和必须相等。
图中已经给出了3个数字。
请计算其它位置要填充的数字,答案唯一。
填好后,请提交绿色节点的4个数字(从左到右,用空格分开)
比如:12 5 4 8
当然,这不是正确的答案。
注意:只提交4个用空格分开的数字,不要填写任何多余的内容。
package Lqb;
public class Text2 {
public static void main(String[] args) {
int[] array={1,2,3,4,5,7,8,9,10,12,13};
permute(array,0);
}
//数组重组(全排列)
public static void permute(int[] array,int start){
if(start==array.length-1&&text(array)!=null){ //当start(数组指向的数为最后一个时),也就是可交换数到了最后一个
System.out.print(text(array));
}
for(int i=start;i<array.length;i++){
swap(array,start,i); //数组指向的数依次与后面每一个交换(遍历第一个数的所有可能位置)
permute(array,start+1);
swap(array,start,i); //重置
}
}
//交换
public static void swap(int[] array,int start,int end){
int t=array[start];
array[start]=array[end];
array[end]=t;
}
//数组验证
public static String text(int[] b){
int[] a=new int[7];
a[0]=6+b[0]+b[1]+14;
a[1]=6+b[2]+b[3]+11;
a[2]=b[4]+b[0]+b[2]+b[5];
a[3]=b[4]+b[1]+b[6]+b[7];
a[4]=b[5]+b[3]+b[8]+b[9];
a[5]=14+b[6]+b[10]+b[9];
a[6]=b[7]+b[10]+b[8]+11;
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
if(a[i]!=a[j]){ //验证错误
return null;
}
}
}
//拼接答案
String str=b[4]+" "+b[0]+" "+b[2]+" "+b[5];
return str;
}
}