关于这个程序,望达人指教!   未解决   悬赏分: 0   -离问题结束还有: 0
#include <stdio.h>
main()
{
FILE *fp;
int a[10][10],b[10][10][10],c[10][10];
int i,j,k,n,p,q,t=1,s;
void fun(int a[10][10],int c[10][10]);

loop:
fp=fopen("shudu.txt","r");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
fscanf(fp,"%d",&a[i][j]);
for(k=1;k<10;k++)
b[i][j][k]=1;
}
fclose(fp);

for(i=1;i<10;i++)
for(j=1;j<10;j++)
{
if(a[i][j]==0)
for(n=1;n<10;n++)
{
if(a[i][n]!=0)
b[i][j][a[i][n]]=0;
if(a[n][j]!=0)
b[i][j][a[n][j]]=0;
}
else
for(n=1;n<10;n++)
b[i][j][n]=0;
}
for(p=0;p<=2;p++)
if((i>p*3+1)&&(i<p*3+3)) break;
for(q=0;q<=2;q++)
if((i>q*3+1)&&(i<q*3+3)) break;
for(i=p*3+1;i<=p*3+3;i++)
for(j=q*3+1;j<=q*3+3;j++)
if (a[i][j]==0)
{
for(n=q*3+1;n<=q*3+3;n++)
if(a[i][n]!=0)
b[i][j][a[i][n]]=0;
for(n=p*3+1;n<=p*3+3;n++)
if(a[n][j]!=0)
b[i][j][a[n][j]]=0;
}

k=0;
for(i=1;i<10;i++)
for(j=1;j<10;j++)
{
s=0;
for(n=1;n<10;n++)
s+=b[i][j][n];
if(s==1)
{
k=1;
for(n=1;n<10;n++)
if(b[i][j][n]==1)
a[i][j]=n;
}
}
if(k==1)
{
fun(c,a);
goto loop;
}
else
{
for(i=1;i<10;i++)
for(j=1;j<10;j++)
{
s=0;
for(n=1;n<10;n++)
s+=b[i][j][n];
if(s==2)
{
k=1;
for(n=1;n<10;n++)
if(b[i][j][n]==1)
{
a[i][j]=n;
if(t==1)
{
b[i][j][n]=0;
t=0;
}
}
}
}
if(k==1) goto loop;
}
s=0;
for(i=1;i<10;i++)
for(j=1;j<10;j++)
for(n=1;n<10;n++)
s+=b[i][j][n];
if((s==0)&&(a!=c))
{
fun(a,c);
t=1;
goto loop;
}
fp=fopen("Answer.txt","w");
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
fprintf(fp,"%d ",a[i][j]);
fprintf(fp,"\n");
}
fclose(fp);
}


void fun(int a[10][10],int c[10][10])
{
int i,j;
for(i=1;i<10;i++)
for(j=1;j<10;j++)
a[i][j]=c[i][j];
}




测试数据:
shudu.txt:
0 1 2 3 4 5 6 7 8 9
1 9 0 1 0 0 0 0 0 4
2 0 0 0 0 0 0 0 6 0
3 0 0 0 8 0 2 5 0 0
4 7 4 0 0 0 0 0 0 0
5 0 5 6 0 0 0 0 0 8
6 0 0 0 0 4 0 0 2 1
7 0 9 0 0 0 0 1 5 0
8 0 0 0 5 2 0 7 0 0
9 0 0 0 0 3 6 0 0 0





由于设计匆忙,程序似乎不能完成应有的功能,而且不能报错,望达人指教!
PS:文件读取总是有问题,a数组不能得到应有的数据.
提问者: 断︻$▅▆/db  - 试用 二级     回答数: 0
  



您尚未登陆, 无法进行对该问题进行解答! 点击这里登陆!