| 关于这个程序,望达人指教!
未解决
悬赏分: |
|
| #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 | |