当前位置: 代码迷 >> C语言 >> 编程中国 哎 难道高手都不在.......
  详细解决方案

编程中国 哎 难道高手都不在.......

热度:464   发布时间:2007-10-17 21:31:37.0
编程中国 哎 难道高手都不在.......

程序在下面,就是从in.txt中读取一个奇数数N,然后写出这个数的幻方。(就是行,列,对角线的和都相等的矩形)
把结果写到文件outA032.txt中。
原来程序都是对的,但是把数据类型改为long(题目的需要),就会出错。
红色的部分就是改动的

/******** Merzirac法生成奇阶幻方:
在第一行居中的方格内放1,依次向左上方填入2、3、4....,
如果左上方已有数字,则向下移一格继续填写。
*********/

#include<stdio.h>
int main(void)
{
void huanfang();
huanfang();
return 0;
}


void huanfang()
{
FILE *fp1,*fp; /* x是行坐标,y是列坐标,k是将二维转换为一维的坐标*/
/* a就是存放幻方的一维数组 */
int k,i,N,*a,j,x1,y1,y,x; /* long k,i,N,*a,j,x1,y1,y,x; */
if ((fp=fopen("in.txt","r")) == NULL)
{
printf("no exit!\n");
exit(0);
}
fp1 = fopen("outA032.txt","w");


/*************下面开始构造幻方 ***********/

while (1)
{
fscanf(fp,"%d",&N); /* fscanf(fp,"%ld",&N) */ /* 读in.txt文件中数据 */
if (N == 0) break;
a= (int *)calloc(N*N,sizeof(int)); /* 开辟一维数组来存放数据*/
/* a= (long *)calloc(N*N,sizeof(long)); */
for (i=1; i<N*N; i++)
a[i]=0;
x=0;
y=N/2;
a[N/2]=1; /* 第一行居中放1 */
for (i=2; i<=N*N; i++)
{
x1 = (x-1+N)%N; /* 保证移动后的元素仍然在矩形中 */
y1 = (y+1+N)%N;
k = x1*N+y1; /* 将二维坐标变换为一维 */
if (a[k] != 0)
x = (x+1+N)%N; /* 如果要移动的位置上有值了,则在原来位置向下走一步*/
else
{
x=x1; /* 如果要移动的位置没有被赋值,则移动到新位置*/
y=y1;
}
k = x*N+y; /* 将二维转换为一维 */
a[k]=i; /* 依次将2,3,4,..... 放入位置 */
}

/************下面将构造好的幻方,写入文件中 ************/

fprintf(fp1,"\n\nN=%d",N); /* 在每次幻方的上面输入N的值 */
/* fprintf(fp1,"\n\nN=%ld",N); */
for (i=0; i<N*N; i++) /* 将存放幻方的数组,写入*/
{
if (i%N == 0 ) /* 每N个元素换行一次,保证输出的是方阵 */
fprintf(fp1,"\n\n");
fprintf(fp1,"%-4d",a[i]); /* fprintf(fp1,"%-4ld",a[i]); */
}
fprintf(fp1,"\n");
}
fclose(fp);
fclose(fp1);
return ;
}

换个名字吸引点人.....

[此贴子已经被作者于2007-10-18 15:21:23编辑过]

搜索更多相关的解决方案: 中国  

----------------解决方案--------------------------------------------------------
杂个没有人帮帮忙啊.........
我写了很多注释了的,应该方便看的嘛
----------------解决方案--------------------------------------------------------
你也把错误提示写出来啊,段错误还是什么
----------------解决方案--------------------------------------------------------
你用printf调试下,看看哪句出错了
----------------解决方案--------------------------------------------------------
没有错误,就是运行的时候如果N&gt;10,就不能写如FP1里面了。
----------------解决方案--------------------------------------------------------

来人啊......


----------------解决方案--------------------------------------------------------
咋我运行可以???

[此贴子已经被作者于2007-10-18 21:01:54编辑过]


----------------解决方案--------------------------------------------------------
我也可以运行..dev C++
----------------解决方案--------------------------------------------------------
  相关解决方案