java编程题,在九宫格内填入1—9九个数字,使得横竖排的数字相加之和都相等

Python018

java编程题,在九宫格内填入1—9九个数字,使得横竖排的数字相加之和都相等,第1张

/*直接复制运行就可以,每一行的九个数字代表一个九宫格的9个数字,从左到右,从上到下*/

import java.util.ArrayList

import java.util.Arrays

public class Test1 {

private static ArrayList<String> arrangeList = new ArrayList<String>() 

 public static void main(String[] args) {

String str = "123456789"//你要排列组合的字符串

char list[] = str.toCharArray()//将字符串转换为字符数组

genernateData(list, 0, list.length - 1)//参数为字符数组和0和字符数组最大下标

int arr[]=new int[9]

for(String str1 : arrangeList){

for(int k=0k<9k++){

arr[k]=Integer.parseInt(str1.substring(k,k+1))

}

if(arr[0]+arr[1]+arr[2]==15&&arr[3]+arr[4]+arr[5]==15&&arr[6]+arr[7]+arr[8]==15&&arr[0]+arr[3]+arr[6]==15&&arr[1]+arr[4]+arr[7]==15&&arr[2]+arr[5]+arr[8]==15&&arr[0]+arr[4]+arr[8]==15&&arr[2]+arr[4]+arr[6]==15){

System.out.println(Arrays.toString(arr))

}

}

}

 

public static void genernateData(char list[], int k, int m) {

 if (k > m) {

 StringBuffer sb = new StringBuffer()//创建一个StringBuffer对象sb

 for (int i = 0 i <= m i++) {

 sb.append(list[i])//循环将字符数组值追加到StringBuffer中

 }

 arrangeList.add(sb.toString())

 } else {

 for (int i = k i <= m i++) {

 swapData(list, k, i)//将下表为k和i的值调换位置

 genernateData(list, k + 1, m)

 swapData(list, k, i)

 }

 }

}

private static void swapData(char list[], int k, int i) {

char temp = list[k]

list[k] = list[i]

list[i] = temp

}

}

这样和你说吧。 其实这个代码的目的是通用的奇数九宫格。

奇数九宫格先做成 斜线方阵

然后将超出部分填入对称的格中,这里就是 1 放到 8,6之间,3 放到4,8之间。

一开始的 a,b是为了定位 (1) 的格子,

a++,b++ 就是在斜向写数字, a,b%3 就是在超出格子后转到对称的位置。

i%3 其实就是写完一个 1,2,3的列,开始写4,5,6的斜行。

你看不明白,是因为这里带有数学算法。

将你其中某些问题的答案放在代码注释中了.

这个程序输出的是固定的九宫格,我想,是根据固有的九宫格中的数字与数组下标的关系来写的代码。

希望对你有所帮助,加油!

class S{

 public static void main(String[] args) { 

  int arr[][] = new int[3][3] 

  //创建一个三阶方阵  

  int a = 2        

  //第3行的行下标

  //???这里是什么意思,2从何而来

  //A:java中数组的下标从0开始

  int b = 3/2    

  //第2列的列下标

  //???同上 

  //A:这里由于b=1,(int)/(int),java中数组的下标从0开始

  for(int i=1i<=9i++){  

   //给数组赋值   

   arr[a++][b++] = i  

   if(i%3==0){     

    //如果i是3的倍数——————???为什么要判断是不是3的倍数 

    a = a-2

    //————————————————???if...else里面的语句是什么意思,作用是什么   

    b = b-1//————————————————???同上  

    }

   //使a,b回到起点:a=2,b=1

   else{       

     //如果i不是3的倍数//————————————————???同上    

    a = a%3   

    b = b%3   

    }  

   }

  //????九宫格的每一行、每一列、对角线都等于15,

  //???但是这里连一个15这个数字都没有出现,但还是成功输出

  //————————————————————???他是怎么做到的 

  System.out.println("输出九宫格:")   

  //遍历输出九宫格  

  for(int i=0i<3i++){ 

   for(int j=0j<3j++){  

    System.out.print(arr[i][j]+"  ") 

   }

  System.out.print("\n")//从你的程序中将此语句上移到此位置 

  }

 }

 }