九宫格java代码思路,java 九宫格

java 写一个九宫格的代码!不用很复杂,实现了基本的功能就行! 谢谢大家!我自己写的都晕了

/*

在白水等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站制作 网站设计制作定制网站制作,公司网站建设,企业网站建设,品牌网站制作,成都全网营销推广,外贸网站建设,白水网站建设费用合理。

九宫格算法代码 C++版

*/

#include stdio.h

int map[9][9] = {0, 0, 3, 8, 1, 0, 0, 0, 9,

5, 0, 0, 4, 0, 0, 0, 8, 0,

0, 6, 0, 9, 0, 0, 1, 0, 0,

0, 0, 8, 0, 3, 0, 0, 0, 6,

0, 0, 0, 0, 0, 0, 0, 0, 0,

9, 0, 0, 6, 0, 0, 5, 0, 0,

0, 0, 6, 0, 0, 9, 0, 1, 0,

0, 1, 0, 0, 0, 5, 0, 0, 4,

2, 0, 0, 0, 4, 8, 7, 0, 0};

void display()

{

int i;

int j;

for (i = 0; i 9; i++)

{

for (j = 0; j 9; j++)

{

if(map[i][j])

{

printf(" %d ", map[i][j]);

}

else

{

printf(" ");

}

}

printf("\n");

}

}

int check(int x, int y, int *mark) //check函数为该格子可以选择的数字

{

int i;

int j;

int gi;

int gj;

int count = 0;

for (i = 1; i = 9; i++)

{

mark[i] = 0; //初始化

}

for (i = 0; i 9; i++)

{

mark[map[x][i]] = 1; //表示该行该数字已存在

mark[map[i][y]] = 1; //表示该列该数字已存在

}

gi = x / 3 * 3; // 九宫格把map分割成9个小块,如果该格子所在行列为(1,4),那么它所在子格子起始为(0,3)到(2,5)的九个小格子

gj = y / 3 * 3;

for (i = 0; i 3; i++)

{

for (j = 0; j 3; j++)

{

mark[map[gi + i][gj + j]] = 1; //此循环为表示所在子格子的九个小格子中已存在该数字

}

}

for (i = 1; i = 9; i++)

{

if(0 == mark[i]) //如果该数字不存在则++

{

count++;

}

}

return count;

}

void crack() //??

{

int i;

int j;

int mark[10]; //标志数字是否已存在

int min = 10; //记录最少可能数字数

int ci = -1; //ci,cj用来记录最少可能数字的格子所在行列

int cj;

for (i = 0; i 9; i++)

{

for (j = 0; j 9; j++)

{

if (map[i][j])

{

continue; //如果该格子已有数字则跳到下一个格子

}

int c = check(i, j, mark); //c为该格子可以选择的数字

if (0 == c)

{

return;

}

if (c min)

{

ci = i;

cj = j;

min = c;

}

}

}

if (-1 == ci)

{

printf("The answer is:\n");

display();

return;

}

check(ci, cj, mark);//这个语句的作用是把mark这个数组设置成最小可能格子缺少的数字,若缺少则为0

for (i = 1; i = 9; i++)

{

if (mark[i] == 0)

{

map[ci][cj] = i; //先填入该数字

crack(); //进行判断

}

map[ci][cj] = 0; //若这个数字不可以得到解则判断下一可能数字(这里类似0-1背包问题)

}

}

int main()

{

printf("The game is:\n");

display();

crack();

return 0;

}

java编程九宫格问题

要求:根据输入的数字n,如:3,5,7...以矩阵显示n行n列数,这些数由1~n*n构成,要求矩阵的每行每列及对角线上n个数之和相等 预备知识: 在距阵中,1在第一行正中,随后的数字应放到上一个数字的右上方方格中,如果向上不行,就放到该列的最下方格子;如果向右不行,就放到该行的最左边;如果都不行,就放到上一个数字的正下方;如果目标格子中已经有数字,也放到上一个数字的正下方 思路: 1) 使用2维数组预备存储1~n*n这些数字 2) 1是放到第一行正中的,所以其索引号是:[0][(n-1)/2] 3) 随后的数字,其索引号原则如下 1 num的行索引为 num-1 的 (行索引-1) , num的列索引为 num-1 的 (列索引+1) 2如果发现num的行,列索引都越位(-1或n),则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 3如果发现num的行,列索引指向的位置已经有数字,则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 4如果发现num的行越位(-1),则 num的行索引为n-1 5如果发现num的列越位(n),则 num的列索引为0 import java.util.Scanner; public class JiuGong { public static void main(String[] args) { Scanner s = new Scanner(System.in); int x = s.nextInt(); //输入长度 int h = 0; //行 //在距阵中,1在第一行正中 int l = x / 2; //列 int[][] a = new int[x][x]; for (int i = 1; i = x * x; i++) { a[h][l] = i; //运行提示溢出 //随后的数字应放到上一个数字的右上方方格中 h--; l++; //3.如果都不行,就放到上一个数字的正下方 if (h 0 l = x) { //先返回上一个数字 h++; l--; //再下移一行 h++; } //1.如果向上不行,就放到该列的最下方格子 else if (h 0) { h = x - 1; } //2.如果向右不行,就放到该行的最左边 else if (l = x) { l = 0; } //4.如果目标格子中已经有数字,也放到上一个数字的正下方 else if (a[h][l] 0) { //先返回上一个数字 h++; l--; //再下移一行 h++; } } //打印九宫格 for (int j = 0; j x; j++) { for (int k = 0; k x; k++) { System.out.print(a[j][k] + " "); } //换行 System.out.println(); } } }

采纳哦

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

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

import java.util.ArrayList;

import java.util.Arrays;

public class Test1 {

private static ArrayListString arrangeList = new ArrayListString(); 

 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=0;k9;k++){

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

}

if(arr[0]+arr[1]+arr[2]==15arr[3]+arr[4]+arr[5]==15arr[6]+arr[7]+arr[8]==15arr[0]+arr[3]+arr[6]==15arr[1]+arr[4]+arr[7]==15arr[2]+arr[5]+arr[8]==15arr[0]+arr[4]+arr[8]==15arr[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;

}

}

java设计九宫格设计思路啊,江湖救急请大神指点!

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

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

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

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

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

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

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


分享文章:九宫格java代码思路,java 九宫格
浏览路径:http://myzitong.com/article/heoscd.html