📄 numbercal.java
字号:
package com.john.cal2;
public class NumberCal
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
// int [][] n = new int[10][10]; //使用下标为:1-9
//初始化数据
int [][]n={ {0,0,0,0,0,0,0,0,0,0},
{0,0,7,0,0,1,0,0,5,0},
{0,2,0,0,0,7,0,0,0,4},
{0,0,0,1,3,0,9,2,0,0},
{0,0,0,3,9,0,2,6,0,0},
{0,6,2,0,0,0,0,0,1,9},
{0,0,0,4,1,0,5,8,0,0},
{0,0,0,7,4,0,8,3,0,0},
{0,3,0,0,0,2,0,0,0,6},
{0,0,1,0,0,5,0,0,4,0}};
// int [][]n={ {0,0,0,0,0,0,0,0,0,0},
// {0,0,4,0,0,9,0,0,0,3},
// {0,8,0,9,0,0,4,0,5,0},
// {0,0,3,0,7,0,0,1,0,0},
// {0,0,0,7,0,0,5,0,9,0},
// {0,6,0,0,0,0,0,0,0,7},
// {0,0,9,0,1,0,0,6,0,0},
// {0,0,0,3,0,0,2,0,1,0},
// {0,0,2,0,5,0,0,7,0,4},
// {0,5,0,0,0,3,0,0,6,0}};
//开始计算
printNumbers(n);
// System.out.println("------------------");
// printNumbers(cal(n)); //1
// System.out.println("------------------");
// printNumbers(cal(n)); //2
// System.out.println("------------------");
// printNumbers(cal(n)); //3
// System.out.println("------------------");
// printNumbers(cal(n)); //4
///////////////
for (int i = 0; i < 100; i++)
{
System.out.println("---------------------------------------: "+i);
printNumbers(cal(n));
if(isFinished(n))
break;
}
// System.out.println("------------------");
// printNumbers(cal(n));
// System.out.println("------------------");
// printNumbers(cal(n));
}
public static boolean isFinished(int [][] n)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
if(n[i][j]==0)
return false;
}
}
return true;
}
public static void printNumbers(int [][] n)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
System.out.print(n[i][j]+" ");
}
System.out.println();
System.out.println();
}
}
public static int [][] cal(int [][] n)
{
int [] a_block;
int [] a_row;
int [] a_line;
int [][] newNumber = null;//= new int[10][10];
for (int i = 1; i < 10; i++)
{
for (int x = 1; x < 10; x++)
{
}
a_block = getAvBlock(n,i);
a_row = getAvRow(n,i);
a_line = getAvLine(n,i);
newNumber = fillBlank(n,a_block,a_row,a_line,i);
}
return newNumber;
}
public static int [] blockHasNum(int [][] n, int num)
{
int []numRecode = new int[10];
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
if(n[i*j][k]==num)
numRecode[i]=1;
}
}
}
return null;
}
/////new
public static int [] getAvBlock(int [][] n, int num)
{
int []numRecode = new int[10];
for (int i = 1; i < 10; i++)
{
int x,y;
x = (i-1)/3;
y = (i-1)%3;
// if(y!=0)
// y=2;
int n_row,n_line;
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
n_row = x*3+j;
n_line = y*3+k;
if(n[n_row][n_line]==num)
numRecode[i]=1;
}
}
}
return numRecode;
}
public static int [][] fillBlank(int [][] n, int [] block, int [] row, int [] line, int num)
{
int [][] newNumber = new int[10][10];
System.arraycopy(n, 0, newNumber, 0, 10);
for (int i = 1; i < 10; i++)
{
if(block[i]==0)
{
int x,y;
x = (i-1)/3;
y = (i-1)%3;
int n_row,n_line;
int n_time = 0;
int n_x=0,n_y=0;
for(int j = 1; j < 4; j++)
{
for(int k = 1; k < 4; k++)
{
n_row = x*3+j;
n_line = y*3+k;
if((n[n_row][n_line]==0)&&(row[n_row]==1)&&(line[n_line]==1))
{
n_x = n_row;
n_y = n_line;
n_time++;
}
}
}
if(n_time == 1)
newNumber[n_x][n_y] = num;
}
}
return newNumber;
}
public static int [] getAvLine(int [][] n, int num)
{
int []numRecode = new int[10];
for (int x = 1; x < 10; x++)
{
if(!isRowHasNum(n,x,num))
numRecode[x]=1;
}
return numRecode;
}
public static int [] getAvRow(int [][] n, int num)
{
int []numRecode = new int[10];
for (int x = 1; x < 10; x++)
{
if(!isLineHasNum(n,x,num))
numRecode[x]=1;
}
return numRecode;
}
public static boolean isLineHasNum(int [][] n, int line, int num)//列
{
for (int i = 1; i < 10; i++)
{
if(n[line][i]==num)
return true;
}
return false;
}
public static boolean isRowHasNum(int [][] n, int row, int num)//行
{
for (int i = 1; i < 10; i++)
{
if(n[i][row]==num)
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -