Hey yo ich hätte eine Frage zu einer Aufgabe:
Ich habe leider keine Idee wie ich die Blockweise überprüfung in meinen Programm einfügen soll.
Die Aufgabe lautet:
Eine allgemeinere Version des Sudokus ist ein n×n-Sudoku. Es ist eine n×n-Matrix von Zahlen zwischen 1 und n (einschließlich), wobei n eine Quadratzahl sein muss. Analog ist ein n × n-Sudoku gültig, wenn in jeder Zeile, in jeder Spalte und in jedem Block jede Zahl genau einmal vorkommt. Ein Block hat hierbei die Größe √ n × √ n, von denen das Sudoku n viele enthält, die ebenfalls jeweils nicht überlappen. Schreiben Sie eine allgemeinere Version des vorherigen Programms, das zunächst eine Quadratzahl n einliest. Anschließend liest Ihr Programm die n 2 Einträge eines n × n-Sudokus zeilenweise ein. Danach gibt Ihr Programm yes aus, wenn das eingelesene Sudoku gültig ist. Andernfalls gibt es no aus.
Mein Programm sieht bisher so aus:
import java.util.Scanner;
public class Aufgabe2 {
public static void main (String [] args){
Scanner scan = new Scanner (System.in);
int n = scan.nextInt(); //einlesen der Zahl n
if(isSquare(n)){
int [][] matrix = new int[n][n]; //ein Array der Laenge nxn wird erstellt
for(int i = 0; i<matrix.length; i++){ //befuellen des Arrays mit selbst eingelesenen Int werten
for( int j = 0; j<matrix.length; j++){
matrix[j] = scan.nextInt();
}
}
for(int i=0; i<n; i++){
for(int j = 0; j<n; j++){
for(int k = 0; k<n; k++){
if(k != i && matrix[j] == matrix [k][j] ||k!=j &&matrix[j]==matrix[k]){
System.out.println("no");
return;
} //prueft ob in den Zeilen oder Spalten die selbe Zahl enthalten ist
//falls ja wird ein no ausgegeben
}
}
System.out.println("yes"); //falls nein wird ein yes ausgegeben
return;
}
}
else {
System.out.println("no");
}
}
public static boolean isSquare(int n) {
int root = (int) Math.sqrt(n);
return root * root == n;
}
}
Ich habe leider keine Idee wie ich die Blockweise überprüfung in meinen Programm einfügen soll.
Die Aufgabe lautet:
Eine allgemeinere Version des Sudokus ist ein n×n-Sudoku. Es ist eine n×n-Matrix von Zahlen zwischen 1 und n (einschließlich), wobei n eine Quadratzahl sein muss. Analog ist ein n × n-Sudoku gültig, wenn in jeder Zeile, in jeder Spalte und in jedem Block jede Zahl genau einmal vorkommt. Ein Block hat hierbei die Größe √ n × √ n, von denen das Sudoku n viele enthält, die ebenfalls jeweils nicht überlappen. Schreiben Sie eine allgemeinere Version des vorherigen Programms, das zunächst eine Quadratzahl n einliest. Anschließend liest Ihr Programm die n 2 Einträge eines n × n-Sudokus zeilenweise ein. Danach gibt Ihr Programm yes aus, wenn das eingelesene Sudoku gültig ist. Andernfalls gibt es no aus.
Mein Programm sieht bisher so aus:
import java.util.Scanner;
public class Aufgabe2 {
public static void main (String [] args){
Scanner scan = new Scanner (System.in);
int n = scan.nextInt(); //einlesen der Zahl n
if(isSquare(n)){
int [][] matrix = new int[n][n]; //ein Array der Laenge nxn wird erstellt
for(int i = 0; i<matrix.length; i++){ //befuellen des Arrays mit selbst eingelesenen Int werten
for( int j = 0; j<matrix.length; j++){
matrix[j] = scan.nextInt();
}
}
for(int i=0; i<n; i++){
for(int j = 0; j<n; j++){
for(int k = 0; k<n; k++){
if(k != i && matrix[j] == matrix [k][j] ||k!=j &&matrix[j]==matrix[k]){
System.out.println("no");
return;
} //prueft ob in den Zeilen oder Spalten die selbe Zahl enthalten ist
//falls ja wird ein no ausgegeben
}
}
System.out.println("yes"); //falls nein wird ein yes ausgegeben
return;
}
}
else {
System.out.println("no");
}
}
public static boolean isSquare(int n) {
int root = (int) Math.sqrt(n);
return root * root == n;
}
}