、程式碼如下
有誤 修改如下
感謝任何建議...
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//X:0;O:-1
int square[101][101]= {{0},{0}};
int main() {
int n = 0,i = 0,j = 0,k = 0,temp = 0,count = 0,dot = 0;
while(scanf("%d",&n)==1) {
i = 0,j = 0,k = 0,temp = 0,count = 0,dot = 0;
memset(square,0,sizeof(square));
for(i=0; i<n; ++i) {
do {
scanf("%d",&temp);
if(temp==0) {
;
}
square[i][temp-1] = -1;
} while(getchar()!='\n');
}
// 檢查橫線
for(i=0; i<n; ++i) {
j=0;
while((j<n-1)&&(square[i][j]==square[i][j+1])) {
++j;
}
if(j==n-1) {
++count;
}
}
// 檢查直線
for(j=0; j<n; ++j) {
i=0;
while((i<n-1)&&(square[i][j]==square[i+1][j])) {
++i;
}
if(i==n-1) {
++count;
}
}
// 檢查斜線
// 由主對角線往兩旁擴展做檢查
// 先左上到右下 再由右上到左下
for(i=0; n-i>=3; ++i) {
j=0,k=i;
dot=0;
while((square[k][j]==square[k+1][j+1])&&(k<n-1)) {
++k,++j;
++dot;
}
if(dot==n-i-1&&dot>=2)
++count;
}
for(j = 1; n-j>=3; ++j) {
i=0,k=j;
dot=0;
while((square[i][k]==square[i+1][k+1])&&(k<n-1)) {
++i,++k;
++dot;
}
if(dot==n-j-1&&dot>=2)
++count;
}
for(i=n-1; n-i<=3; --i) {
j=0,k=i;
dot=0;
while((square[k][j]==square[k-1][j+1])&&(k>0)) {
--k,++j;
++dot;
}
if(dot==i&&dot>=2)
++count;
}
for(j=1; n-j>=3; ++j) {
i=n-1,k = j;
dot=0;
while((square[i][k]==square[i-1][k+1])&&(k<n-1)) {
--i,++k;
++dot;
}
if(dot==n-j-1&&dot>=2)
++count;
}
printf("%d\n",count);
}
return 0;
}