📄 j_gridboard15.java
字号:
// ////////////////////////////////////////////////////////
//
// J_Grid15.java
// ////////////////////////////////////////////////////////
class J_GridBoard15
{
int [] [] m_board;
J_GridBoard15( )
{
m_board= new int[3][3];
} // End of method: J_GridBoard15
// 输出棋盘的格线行
private void mb_outputGridRowBoard( )
{
int i;
System.out.print("+");
for (i= 0; i< 5; i++)
System.out.print("-");
System.out.println("+");
} // End of method: mb_outputGridRowBoard
// 输出棋盘的数据行 (第i行, i只能为0, 1 或 2)
private void mb_outputGridRowBoard(int i)
{
int j;
for (j= 0; j< m_board[i].length; j++)
System.out.print("|" + m_board[i][j]);
System.out.println("|");
} // End of method: mb_outputGridRowBoard
// 输出棋盘
public void mb_outputGrid( )
{
int i;
mb_outputGridRowBoard( );
for (i= 0; i< m_board.length; i++)
{
mb_outputGridRowBoard(i);
mb_outputGridRowBoard( );
}
} // End of method: mb_outputGrid
// 初始化数据
private void mb_dataInit( )
{
int i, j, k;
for (i= 0, k= 1; i< m_board.length; i++)
for (j= 0; j< m_board[i].length; j++, k++)
m_board[i][j]= k;
} // End of method: mb_dataInit
// 数据结束检测
// 返回值说明: 当数据为最后一个数据时,返回 true;否则返回 false
private boolean mb_dataEnd( )
{
int i, j, k;
for (i= 0, k= 9; i< m_board.length; i++)
for (j= 0; j< m_board[i].length; j++, k--)
if (m_board[i][j]!= k)
return(false);
return(true);
} // End of method: mb_dataEnd
// 取下一个数据
private void mb_dataNext( )
{
int i, j;
for (i= m_board.length-1; i>=0 ; i--)
for (j= m_board[i].length-1; j>=0 ; j--)
if (m_board[i][j]==9)
m_board[i][j]=1;
else
{
m_board[i][j]++;
return;
}
} // End of method: mb_dataNext
// 数据检测: 判断数据中是否含有相同的数字
// 当数据中存在相同数字时,返回 false; 否则返回 true.
private boolean mb_dataCheckDifferent( )
{
int i, j;
int [] digit= new int [10];
for (i= 0; i< m_board.length; i++)
for (j= 0; j< m_board[i].length; j++)
digit[m_board[i][j]]= 1;
for (i=1, j= 0; i< digit.length; i++)
j+=digit[i];
if (j==9)
return(true);
return(false);
} // End of method: mb_dataCheckDifferent
// 数据检测: 各行和是否为 15
// 当各行和均为 15 时,返回 true; 否则返回 false.
private boolean mb_dataCheckSumRow( )
{
int i, j, k;
for (i= 0; i< m_board.length; i++)
{
for (j= 0, k= 0; j< m_board[i].length; j++)
k+= m_board[i][j];
if (k!=15)
return(false);
}
return(true);
} // End of method: mb_dataCheckSumRow
// 数据检测: 各列和是否为 15
// 当各列和均为 15 时,返回 true; 否则返回 false.
private boolean mb_dataCheckSumColumn( )
{
int i, j, k;
for (i= 0; i< m_board.length; i++)
{
for (j= 0, k= 0; j< m_board.length; j++)
k+= m_board[j][i];
if (k!=15)
return(false);
}
return(true);
} // End of method: mb_dataCheckSumColumn
private boolean mb_dataCheck( )
{
if (!mb_dataCheckDifferent( ))
return(false);
if (!mb_dataCheckSumRow( ))
return(false);
if (!mb_dataCheckSumColumn( ))
return(false);
if (m_board[0][0]+m_board[1][1]+m_board[2][2]!=15) // 检测对角线之和是否为 15
return(false);
if (m_board[0][2]+m_board[1][1]+m_board[2][0]!=15) // 检测对角线之和是否为 15
return(false);
return(true);
} // End of method: mb_dataCheck
// 求解并输出棋盘问题
public void mb_arrange( )
{
int n= 1;
for (mb_dataInit( ); !mb_dataEnd( ); mb_dataNext( ))
{
if (mb_dataCheck( ))
{
System.out.println("Result [" + n + "]:");
n++;
mb_outputGrid( );
}
}
} // End of method: mb_arrange
} // End of class: J_Grid15
private class J_Grid15
{
public static void main(String args[])
{
J_GridBoard15 a= new J_GridBoard15( );
a.mb_arrange( );
} // End of method: main
} // End of class: J_Grid15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -