荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: wwei (玩玩而已), 信区: Program
标  题: Re: 一个TC问题
发信站: 荔园晨风BBS站 (Mon Oct 21 10:55:28 2002), 站内信件

我写了一个,不过方法有点傻,就是从1~n*n,找到对应的数组元素并赋值
代码如下:
/****************************************************/
/* filename:fz */
/****************************************************/
int m=1,n,i,j;  /*m记录当前操作的数组元素的值,其范围是1~n*n
                n记录每行需要赋值的宽度
                i,j记录当前操作的数组元素的行列下标
为了方便函数调用能改变多个值,及免除函数调用时需要太多的参数,使用全局变量
*/

void printall (b)
int b[80][80];
{int n1,n2;
printf("\n");
  for(n1=0;n1<n;n1++)
        {for(n2=0;n2<n;n2++) printf("%5d",b[n1][n2]);
                printf("\n");}
}

void inline(b,fla,su)
int b[80][80], fla,su;
/*本函数给数组的一行或者一列赋值*/
{int n1,n2;
while (1)
    {n1=i;n2=j;
        if (fla==0 && su==0) n2=n2+1;
        else if (fla==0 && su!=0) n2=n2-1;
        else if (fla==1 && su==0) n1=n1+1;
        else n1=n1-1;
printf("\nm= %d\n" ,m);

if (n1<0 ||n2<0 || n1>=n ||n2>=n || b[n1][n2]!=0)
{b[i][j]=m;
printf("this:b[%d][%d]=%5d\n" ,i,j,m);
{if (m==(n*n))
    printf("this is the last number,all is OK.\n" ,i,j,m);
else
    printf("next:b[%d][%d]    error,out of range or not empty.\n" ,n1,
n2);}
/*下一个待操作的元素超出范围或者已经被赋值,则跳回主程序改变方向*/
break;}
else
{b[i][j]=m;
printf("this:b[%d][%d]=%5d\n" ,i,j,m);
    printf("next:b[%d][%d]    \n" ,n1,n2);
m++;i=n1;j=n2;}
    }
}

void main()
{int n1,n2,b[80][80]={0},fla,su,chgtime=0;
float tmp1 ,tmp2;
  printf("\nPlease input a number:(2~80)\n");
  scanf("%d",&n);
if (n<=1 || n>80)
 {printf("\nerror!\n");
 goto end;}
printf("\nthe old numbers is :\n");
printall (b);

i=0;j=0;fla=0;su=0;
while (m <n*n)
{inline(b,fla,su);
chgtime++;
printf ("change %d times",chgtime);
{if (fla==0) fla=1;else fla=0;} /*这里fla记录对"行"操作,还是对"列"操作
*/
{tmp1=(float)i;tmp2=(float)n;
if (tmp1<tmp2/2) su =0;
else su=1;}     /*这里su记录在对"行"或"列"操作时,下标是进行自加还是自减运算
*/
}/*每循环一次,则对一行或一列赋值,随后改变fla操作对象,并确定对行或列操作
的顺序*/

{
printf("\nthe new numbers is :\n");
printall (b);
}

end:
;
}

/*the end of file fz.c */
/***********************************************************/
?
? 在 lr (三戒) 的大作中提到: 】
: 你可以帮我写一个吗?
: 【 在 PENNY (摩诃无量) 的大作中提到: 】
: :     一个数组、一重循环、只要找到坐标规律就可以了。


--

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.36.61]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店