は、私は数独が有効であるかどうかを確認し、Javaのプログラムを持って、私は2つのメソッドを持って、最初は、すべての列の合計を確認するサブグリッド、行と45であれば教えて、とあります2番目は、すべてのスドクの合計が405かどうかをチェックしているので、スドクが有効なので、私はカウンターの例を探しています。その入力では、有効なスドクがありますが、これはコードです:数独ソリューションチェッカー
public class test_checker {
static final boolean valide=true;
static final boolean non_valide=false;
// verify every sub-grid if it is valid
static boolean check_subgrid(int a[][],int ei,int ej){
int sum=0;
for(int i=ei;i<ei+3;i++){
for(int j=ej;j<ej+3;j++){
sum=sum+a[j][i];
}
}
if(sum!=45) return non_valide;
else return valide;
}
//verify a sudoku by sum of every row & column & sub-grid
static boolean Checker1(int a[][]){
int sum=0;
//check row
for(int i=0;i<9;i++){
sum=0;
for(int j=0;j<9;j++){
sum=sum+a[i][j];
}
if(sum!=45) return non_valide;
}
//check column
for(int i=0;i<9;i++){
sum=0;
for(int j=0;j<9;j++){
sum=sum+a[j][i];
}
if(sum!=45) return non_valide;
}
//check sub-grid
for(int i=0;i<9;i=i+3){
for(int j=0;j<3;j=j+3){
if(check_subgrid(a,i,j)==non_valide) return non_valide;
}
}
return valide;
}
//verify by sum of all sudoku
static boolean Checker2(int a[][]){
int sum=0;
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
sum=sum+a[i][j];
}
}
if(sum!=405) return non_valide;
else return valide;
}
public static void main(String[] args) {
int [][] sudoku =
{
{1,2,3,4,5,6,7,8,9},
{4,5,6,7,8,9,1,2,3},
{7,8,9,1,2,3,4,5,6},
{3,1,2,9,7,8,6,4,5},
{6,4,5,3,1,2,9,7,8},
{9,7,8,6,4,5,3,1,2},
{2,3,1,5,6,4,8,9,7},
{5,6,4,8,9,7,2,3,1},
{8,9,7,2,3,1,5,6,4}
};
if(Checker1(sudoku)) System.out.println("it's valide (checker1)!");
else System.out.println("it's not valide !");
if(Checker2(sudoku)) System.out.println("it's valide (checker2) !");
else System.out.println("it's not valide !");
}
}
陽性の結果が得られます(繰返し数は合計45である)。番号が繰り返されないかどうかを確認する必要があります。 –
この質問はhttp://codereview.stackexchange.comに適していますか? – Paul
あなたの基準を満たしていない有効な9x9数独はありません。それは、有効な数独の定義から直接得られます。あなたが*求めているべき質問は、無効*** *** 9×9グリッドがあるかどうかです。それにもかかわらず、***はあなたの基準を満たしています。 –