2018/12/15

a016: 數獨(SUDOKU)

a016: 數獨(SUDOKU)


#include

int check(int* a) {
  // 1) 比對直線(橫+直)
  for (int k=0; k<9 k="" p="">    for (int i=0; i<9 i="" p="">      for (int j=i+1; j<9 j="" p="">        if (*(a+k*9+i) == *(a+k*9+j)) return 0; // 橫線
        if (*(a+i*9+k) == *(a+j*9+k)) return 0; // 直線
      }
    }
  }
  // 3) 比對3x3
  for (int m=0; m<3 m="" p="">    for (int n=0; n<3 n="" p="">      // 比對每個 3x3
      for (int j=0; j<9 j="" p="">        for (int i=0; i<9 i="" p="">          if (i != j && *(a+(m*3+j/3)*9+j%3+n*3) == *(a+(m*3+i/3)*9+i%3+n*3)) return 0;
        }
      }
    }
  }
  return 1;
}

int main ()
{
  int a[81];
  int *pa;
 
  while (!feof(stdin)) {
    pa = a;
    for (int i=0; i<9 i="" p="">      if (scanf ("%d %d %d %d %d %d %d %d %d", pa+0, pa+1, pa+2, pa+3, pa+4, pa+5, pa+6, pa+7, pa+8) != 9) return 0;
      pa += 9;
    }
    printf ("%s\n", check(a)?"yes":"no");
  }
  return 0;
}

0 意見: