Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int sudoku[9][9] = { 0 };
  7.  
  8. void sudoku_eingabe()
  9. {
  10.     string eingabe[11] = { };
  11.  
  12.     for (int m = 0; m < 11; m++)
  13.     {
  14.         getline(cin, eingabe[m]);
  15.     }
  16.  
  17.     for (int i = 0, l = 0; i < 11; i++) // l nimmt nur die Zeilen wahr, die Zahlen enthalten
  18.     {
  19.         if (i % 4 != 3) // Um die 3. und 7. Zeile nicht einzulesen
  20.         {
  21.             for (int j = 0, k = 0; j < eingabe[i].size(); j++) // i = Zeile und j = Poisition im Sudoku egal ob Punkt oder Zahl
  22.             {
  23.                 if (eingabe[i].at(j) >= '0' && eingabe[i].at(j) <= '9') // wenn sich auf dieser Position eine Zahl befindet dann
  24.                 {
  25.                     sudoku[l][k] = eingabe[i].at(j) - '0'; // wird diese im Array eingefügt
  26.                     k++; // erhöht die korrekten Positionen um 1
  27.                 }
  28.  
  29.             }
  30.             l++; // erhöht die korrekten Zeilen
  31.         }
  32.     }
  33. }
  34.  
  35. void sudoku_ausgabe()
  36. {
  37.     for (int i = 0; i < 9; i++)
  38.     {
  39.         for (int j = 0; j < 9; j++)
  40.         {
  41.  
  42.             cout << ";" << sudoku[i][j];
  43.             if (j % 3 == 2 && j != 8)
  44.             {
  45.                 cout << ";" << "//";
  46.             }
  47.         }
  48.         cout << endl;
  49.         if (i % 3 == 2 && i != 8)
  50.         {
  51.             cout << "=======//=======//=======" << endl;
  52.         }
  53.     }
  54. }
  55.  
  56. void sudoku_pruefen()
  57. {
  58.     bool korrektes_sudoku = true;
  59.     for (int i = 0; i < 9; i++) // Spalten überprüfen, durch durchgehen
  60.     {
  61.         unsigned int zahlen_anzahl[9] = { 0 }; // wie oft kommt eine Zahl in jeder Spalte vor
  62.         for (int j = 0; j < 9; j++) // geht jede Zahl durch
  63.         {
  64.             for (int k = 0; k < 9; k++)
  65.             {
  66.                 if (sudoku[j][i] == k +1) // verschiebung damit Array von 1-9 geht
  67.                 {
  68.                     zahlen_anzahl[k]++; // geht eine weitere Spalte durch
  69.                 }
  70.             }
  71.         }
  72.         for (int k = 0; k < 9; k++) // geht Spalten durch
  73.         {
  74.             if (zahlen_anzahl[k] == 0)
  75.             {
  76.                 cout << "Spalte " << i << ": Zahl " << k+1 <<" kommt nicht vor."<< endl;
  77.                 korrektes_sudoku = false;
  78.             }
  79.             else if (zahlen_anzahl[k] > 1)
  80.             {
  81.                 cout << "Spalte " << i << ": Zahl " << k + 1 << " kommt mehrfach vor." << endl;
  82.                 korrektes_sudoku = false;
  83.             }
  84.         }
  85.     }
  86.     for (int i = 0; i < 9; i++) //Zeilen durchgehen Durch durchgehen
  87.     {
  88.         unsigned int zahlen_anzahl[9] = { 0 };
  89.         for (int j = 0; j < 9; j++)
  90.         {
  91.             for (int k = 0; k < 9; k++)
  92.             {
  93.                 if (sudoku[i][j] == k + 1)
  94.                 {
  95.                     zahlen_anzahl[k]++;
  96.                 }
  97.             }
  98.         }
  99.         for (int k = 0; k < 9; k++) // Geht Zeilen durch
  100.         {
  101.             if (zahlen_anzahl[k] == 0)
  102.             {
  103.                 cout << "Zeile " << i << ": Zahl " << k + 1 << " kommt nicht vor." << endl;
  104.                 korrektes_sudoku = false;
  105.             }
  106.             else if (zahlen_anzahl[k] > 1)
  107.             {
  108.                 cout << "Zeile " << i << ": Zahl " << k + 1 << " kommt mehrfach vor." << endl;
  109.                 korrektes_sudoku = false;
  110.             }
  111.         }
  112.     }
  113.     for (int i = 0, spalte = 0, zeile = i % 3; i < 9; i++) //Block durchgehen
  114.     {
  115.         unsigned int zahlen_anzahl[9] = { 0 };
  116.         zeile = i%3; //Position des Blockes in der Aktuellen Zeile (erster, zweiter dritter)
  117.          // Position des Blockes in der Aktuellen Spalte (erste, zweite, drtte)
  118.         for (int j = 0 + spalte * 3; j < 3 + spalte*3; j++)
  119.         {
  120.             for (int k = 0 + zeile * 3; k < 3 + zeile*3; k++)
  121.             {
  122.                 for (int l = 0; l < 9; l++)
  123.                 {
  124.                     if (sudoku[j][k] == l + 1)
  125.                     {
  126.                         zahlen_anzahl[l]++;
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.         if (zeile == 2)
  132.         {
  133.             spalte++;
  134.         }
  135.         for (int k = 0; k < 9; k++)
  136.         {
  137.             if (zahlen_anzahl[k] == 0)
  138.             {
  139.                 cout << "Block " << i << ": Zahl " << k + 1 << " kommt nicht vor." << endl;
  140.                 korrektes_sudoku = false;
  141.             }
  142.             else if (zahlen_anzahl[k] > 1)
  143.             {
  144.                 cout << "Block " << i << ": Zahl " << k + 1 << " kommt mehrfach vor." << endl;
  145.                 korrektes_sudoku = false;
  146.             }
  147.         }
  148.     }
  149.     if (korrektes_sudoku == true)
  150.     {
  151.         cout << "Das Sudoku ist gueltig." << endl;
  152.     }
  153. }
  154.  
  155. int main()
  156. {
  157.     cout << "Bitte geben Sie das Sudoku ein:" << endl;
  158.     sudoku_eingabe();
  159.     //cout << endl << "Das Sudoku lautet:" << endl;
  160.     //sudoku_ausgabe();
  161.     sudoku_pruefen();
  162.     system("PAUSE");
  163.     return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement