在我的dev-c++有跑出答案QQ
不知道爆在哪邊 QQ
想法是抓一個大小為9的整數陣列 把它初始為0
然後如果輸入是1就會在*r[0]的值設1
2就會在*r[1]的值設1 以此類推
如果陣列全是1輸出yes
反之輸出no
t = 0代表陣列全是1
t = 1就代表有錯
到底爆在哪 QQ
#include <stdio.h>
int check(int *);
int main()
{
int x, y, t, a, b;
while (1)
{
int * arr = (int *)malloc(9 * 9 * sizeof(int));
int * z = (int *)calloc(9, sizeof(int));
int * r;
t = 0;
for (x = 0; x < 81; x++)
scanf("%d", arr + x);
for (y = 0, r = arr ; y < 9; y++) //橫
{
for (x = 0; x < 9; x++)
{
*(z + *(r + 9 * y + x) - 1) = 1;
}
if ((t = check(z)) == 1)
break;
}
if (t == 1)
{
printf("no\n");
free(arr);
free(z);
continue;
}
for (x = 0, r = arr; x < 9; x++)
{
for (y = 0; y < 9; y++)
{
*(z + *(r + 9 * y + x) - 1) = 1;
}
if ((t = check(z)) == 1)
break;
}
if (t == 1)
{
printf("no\n");
free(arr);
free(z);
continue;
}
for (a = 0, r = arr; a < 3; a++)
{
if ((t == 1))
break;
for (b = 0; b < 3; b++)
{
for (x = 0; x < 3; x++)
{
for (y = 0; y < 3; y++)
{
*(z + *(r + 27 * a + 3 * b + x + 9 * y ) - 1) = 1;
}
}
if ((t = check(z)) == 1)
break;
}
}
if (t == 1)
{
printf("no\n");
free(arr);
free(z);
continue;
}
if (t == 0)
{
printf("yes\n");
free(arr);
free(z);
continue;
}
} //while end
return 0;
}
int check(int *x)
{
int *t = x;
int *p = x;
int i, j;
for (i = 0; *(t + i) == 1 && i < 9; i++)
continue;
for (j = 0; j < 9; j++)
*(p + j) = 0;
if (i == 9)
return 0;
else
return 1;
}