fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4.  
  5.  
  6.  
  7.  
  8.  
  9. int data[9][9];
  10.  
  11. void sudoku(int x, int y)
  12. {
  13. int line[10];
  14. for (int i = 0; i < 10; i++)
  15. line[i] = 0;
  16.  
  17. int zerocount = 0;
  18. int zerocount2 = 0;
  19. for (int i = 0; i < 9; i++)
  20. {
  21. line[data[x][i]]++;
  22. zerocount++;
  23. }
  24.  
  25.  
  26. int line2[10];
  27. for (int i = 0; i < 10; i++)
  28. line2[i] = 0; //구획에 있는 숫자를 비교할 line2
  29.  
  30. //해당 구획에 있는 수를 찾는다.
  31. for (int i = (x / 3)*3; i < (x / 3)*3 + 3; i++)
  32. for (int j = (y / 3)*3; j < (y / 3)*3 + 3; j++)
  33. {
  34. zerocount2++;
  35. line2[data[i][j]]++; //구획에 있는 숫자 처리
  36. }
  37.  
  38.  
  39.  
  40.  
  41. for(int _ = 0 ; _ < zerocount*zerocount2 ; _++)
  42. for (int i = 1; i < 10; i++)
  43. {
  44. if (line[i] == 0 && line2[i] == 0) //채워질 숫자를 찾았을 경우
  45. data[x][y] = i;
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. for (int i = 0; i < 9; i++)
  52. for (int j = 0; j < 9; j++)
  53. scanf("%d", &data[i][j]);
  54.  
  55.  
  56. for (int i = 0; i < 9; i++)
  57. for (int j = 0; j < 9; j++)
  58. if (data[i][j] == 0)
  59. sudoku(i, j);
  60.  
  61.  
  62.  
  63.  
  64. for (int i = 0; i < 9; i++)
  65. {
  66. printf("\n");
  67. for (int j = 0; j < 9; j++)
  68. printf("%d ", data[i][j]);
  69. }
  70.  
  71.  
  72. return 0;
  73. }
Success #stdin #stdout 0s 4524KB
stdin
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
stdout
9 8 7 6 5 4 3 2 1 
6 5 4 9 8 7 0 0 0 
3 2 1 0 0 0 9 8 7 
9 8 7 6 5 4 3 2 1 
6 5 4 9 8 7 0 0 0 
3 2 1 0 0 0 9 8 7 
9 8 7 6 5 4 3 2 1 
6 5 4 9 8 7 0 0 0 
3 2 1 0 0 0 9 8 7