方格填數
如下的10個格子
填入0~9的數字,要求:連續的兩個數字不能相鄰,
(左右、上下、對角都算相鄰)
一共有多少種可能的填數方案?
請填寫表示方案數目的整數,
注意:你提交的應該是一個整數,不要填寫任何多余的內容或說明性文字,
這道題還是先全排列,然后進行check檢查,符合要求的counts++,還好只有十個格子,一一檢測就行,
public class Main{
public static int counts=0;
public static void main(String[]arms) {
int[] nums= {0,1,2,3,4,5,6,7,8,9};
arr(nums, 0);
System.out.println(counts);
}
public static void arr(int[]nums,int i) {
if(i>=nums.length-1) {
if(check(nums))counts++;
return;
}
for(int j=i;j<nums.length;j++) {
sweap(nums, i, j);
arr(nums,i+1);
sweap(nums, i, j);
}
}
public static void sweap(int[]nums,int a,int b) {
int temp=0;
temp=nums[a];
nums[a]=nums[b];
nums[b]=temp;
}
public static boolean check(int[]nums) {
if ( abs(nums[0] - nums[1]) == 1 || abs(nums[0] - nums[3]) == 1 ||
abs(nums[0] - nums[4]) == 1 || abs(nums[0] - nums[5]) == 1 ||
abs(nums[1] - nums[2]) == 1 || abs(nums[1] - nums[4]) == 1 ||
abs(nums[1] - nums[5]) == 1 || abs(nums[1] - nums[6]) == 1 ||
abs(nums[2] - nums[5]) == 1 || abs(nums[2] - nums[6]) == 1 ||
abs(nums[3] - nums[4]) == 1 || abs(nums[3] - nums[7]) == 1 ||
abs(nums[3] - nums[8]) == 1 || abs(nums[4] - nums[5]) == 1 ||
abs(nums[4] - nums[7]) == 1 || abs(nums[4] - nums[8]) == 1 ||
abs(nums[4] - nums[9]) == 1 || abs(nums[5] - nums[6]) == 1 ||
abs(nums[5] - nums[8]) == 1 || abs(nums[5] - nums[9]) == 1 ||
abs(nums[6] - nums[9]) == 1 || abs(nums[7] - nums[8]) == 1 ||
abs(nums[8] - nums[9]) == 1)
return false;
return true;
}
private static int abs(int i) {
return Math.abs(i);
}
}
最終答案1580
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272576.html
標籤:其他
上一篇:第二周周測題解

