新人求教!巧取数字:1-6这6个数,放进成倒三角排列的○里,要求数字不能重复,且下方数字为相邻上方两个数字之差
一个公司的面试题,有点类似解谜,求各位大神帮忙
题目是这样的:
1-6这6个数,放入倒三角排列的○里,要求不能重复,且下方数字为相邻上方两个数字之差,问有多少种排列,要求用程序写出来
给了一个提示,有这样一个图形
○○
○
那么
1 3 3 1
2 和 2 都是正确的
问题是在下图的○里填入符合题目要求的数字,有多少种排列呢
○○○
○○
○
我自己在纸上写了一种
1 6 4
5 2
3
供各位前辈理解题意...
我想了好久实在没有程序化思路只有求助了
望各位前辈帮忙
不胜感谢!
[解决办法]
一个很笨的办法,供参考啊!
package csdn.calculate;import java.util.Arrays;public class SixNumberArrange{ public static final int MAX=6; //数据范围。 //对数组进行判断,逻辑即是否符合题目要求。符合返回true,否则返回false. // public static boolean isOk(int[] inputArray) { if((Math.abs(inputArray[0]-inputArray[1])==inputArray[3])&& (Math.abs(inputArray[1]-inputArray[2])==inputArray[4])&& (Math.abs(inputArray[3]-inputArray[4])==inputArray[5])) { return true; } else { return false; } } //主函数。 public static void main(String[] args) { //创建一个整型数组。 int[] input=new int[MAX]; //create an array //判断开始。 for(int i=1;i<=MAX;i++) { input[0]=i; //数组第一个位置。 for(int j=1;j<=MAX;j++) { if(j==i) { continue;} //前面如果出现了这个数,循环从新开始,以此类推。 input[1]=j; for(int h=1;h<=MAX;h++) { if(h==i||h==j){continue;} input[2]=h; for(int k=1;k<=MAX;k++) { if(k==i||k==j||k==h){continue;} input[3]=k; for(int m=1;m<MAX;m++) { if(m==i||m==j||m==h||m==k){ continue;} input[4]=m; for(int n=1;n<=MAX;n++) { if(n==i||n==j||n==h||n==k||n==m){continue;} input[5]=n; if(isOk(input)) //判断。 { System.out.println(Arrays.toString(input)); } } } } } } } }}