gxqcn
发表于 2008-9-9 09:33:08
确实够精简了。:b:
shshsh_0510
发表于 2008-9-9 13:14:14
还是liangbch的既清晰又简洁,我按着改了改,还能少一些
main(){
int i,j,s,t,r;
for(i=5;i<9;i++){r=2*i-9;t=r*r;s=t;for(j=r;j>=1;j--){s=t-j;s=t+j;s=t+r+j;s=t-r-j+1;}}
for(i=1;i<9;i++,printf("\n"))for(j=1;j<9;j++)printf("%3d",64-s);
printf("--------------------------\n");
printf("1 2 3 4 5 6 7 8\n28 29 30 31 32 33 34 9\n27 48 49 50 51 52 35 10\n26 47 60 61 62 53 36 11\n25 46 59 64 63 54 37 12\n24 45 58 57 56 55 38 13\n\
23 44 43 42 41 40 39 14\n22 21 20 19 18 17 16 15\n");
}
shshsh_0510
发表于 2008-9-9 13:22:25
不算main 前面,前面的219字符
直接print的202字符
俺就是想知道有没可能超过他 :)
无心人
发表于 2008-9-9 14:49:00
:)
呵呵
都很厉害的
几位有时间开个帖子
讲点C语言的精妙
shshsh_0510
发表于 2008-9-9 14:51:31
int i=5,j,s,t,r;for(;i<9;i++){r=2*i-9;t=r*r;s=t;for(j=r;j>0;j--){s=t-j;s=t+j;s=t+r+j;s=t-r-j+1;}}for(i=9;i<73;i++)printf("%c%d",(1==i%8)?10:0,64-s);
198,呵呵终于超过直接printf了 :)
无心人
发表于 2008-9-9 15:01:11
我倒
这也行啊
能通过什么编译器?
shshsh_0510
发表于 2008-9-9 15:08:34
我用vc6
test0(){
int i=5,j,s,t,r;for(;i<9;i++){r=2*i-9;t=r*r;s=t;for(j=r;j>0;j--){s=t-j;s=t+j;s=t+r+j;s=t-r-j+1;}}for(i=9;i<73;i++)printf("%c%d",(1==i%8)?10:0,64-s);
}
mathe
发表于 2008-9-10 17:35:53
12345678282930313233349274849505152351026476061625336112546596463543712244558575655381323444342414039142221201918171615如图,查看$N^2$所在格子次对角线方向直线上格子,被这个各自分成两段,相邻格子的差值的差值为8,也就是我们可以将它们的值写成二次方程形式.而丢与其它格子,分别过这个格子做横线或众线交于那个次对角线,同相交格子的距离就是两个格子值的差值.
通过这个,我们可以得出一个公式解,只是公式有点复杂,需要分成四种情况
无心人
发表于 2008-9-10 19:52:40
在网上有一个一次定位的解存在
shshsh_0510
发表于 2008-9-11 07:54:01
我上面的程序就是mathe说的分4种情况的公式
11#的方法,就是一种将1-64直接映射为 (x,y)的公式
不知无心人所说的链接在哪?