输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和都相等。
/** * 题目描述:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得 * 正方体上三组相对的面上的4个顶点的和都相等。 * @author 崔洪振367 * @version 创建时间:2017年8月27日 上午11:19:59 * * 解题思路:先找出这个8个数字的全排列,然后验证每种全排列,是否满足三对面上的和相等。 */ public class Q28_正方体的三面和相等 { public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8}; int[] array2 = {1,2,3,2,3,2,1,2}; permutation(array2); } public static void permutation(int[] array){ if(array == null || array.length == 0 || array.length>8){ return ; } System.out.println(subPermutation(array, 0, array.length-1)); //System.out.println(flag); } public static boolean subPermutation(int[] array, int start, int end){ if(array == null || array.length<=0){ return false; } if(start == end){ return false; } if(isMatch(array)){ //System.out.println(true); return true; }else{ for(int p=start; p<=end; p++){ swap(array, start, p); subPermutation(array, start+1, end); swap(array, start, p); } } return false; } private static void swap(int[] array, int start, int p) { int temp = array[start]; array[start] = array[p]; array[p] = temp; } private static boolean isMatch(int[] array) { if(array == null){ return false; } int r1 = array[0] + array[1] + array[2] + array[3]; int r2 = array[4] + array[5] + array[6] + array[7]; int r3 = array[0] + array[2] + array[4] + array[6]; int r4 = array[1] + array[3] + array[5] + array[7]; int r5 = array[0] + array[1] + array[4] + array[5]; int r6 = array[2] + array[3] + array[6] + array[7]; if(r1 == r2){ if(r3 == r4){ if(r5 == r6){ return true; } } } return false; } }