mathe 发表于 2008-9-11 08:25:12

11#是将1-64映射为(x,y)的方法,但是如果写出逆映射,应该可以好一些

shshsh_0510 发表于 2008-9-11 09:31:41

其实那个方法更复杂一些,需要仔细调节周期和幅度,使得各角度落在各整数区间,那两个系数俺可是算了好一会,我想看看有没更简洁的一些公式
我那个公式本质是先求出某点到中心的距离,即所在圈数,然后用极坐标表示。调解周期和幅度,使2*PIk 在各k<N/2 时位于各整数区间。
但该方法用到较多数学函数,尤其vc6没有round函数,所以效果不是很好

无心人 发表于 2008-9-11 09:42:27

哎,不经意间搜到的
我以为大家都能搜索到呢
可是刚才我也搜索不到了

那个算法是把方阵当作一维数组填充的

shshsh_0510 发表于 2008-9-12 09:10:27

没事再来个windows直接写屏的
#include <windows.h>
p(int x,int y,int n){COORD p={3*x,y};SetConsoleCursorPosition(GetStdHandle(-11),p);printf("%d",n);}
test(){
    int i=5,j,t,r;for(;i<9;i++){r=2*i-9;t=r*r;p(i,i,t);for(j=r;j>=1;j--){p(i,i-j,t-j);p(i-j,i,t+j);p(9-i,i-j,t+r+j);p(i-j+1,9-i,t-r-j+1);}}
}
由于win32超长的函数名,而且还得include <windows.h>所以比直接for一下还长,但如果有个gotoxy之类的简单函数,估计会好一些

shshsh_0510 发表于 2008-10-7 14:42:39

8*8太小了,直接打印如果编一下码,那种按规律的就不他可能超过了,比如最简单的,用asc码编一下:
void test()
{
        int i=1;char a[]="'()*+,-./CDEFGHI0BWXYZL3?Ta\`_^M4>SRQPON5=<;:9876";
        for(;i<65;i++)printf("%2d%c",a-39,(i%8)?0:10);
}
最短能多短?:Q:

shshsh_0510 发表于 2008-10-7 15:05:05

还可以模仿那个“helloworld”程序,将字符串用__FILE__代替,不过需要比较小心的选择编码,我这选择的编码方案中出现了windows文件名中的限制字符,所以不成,哪位有兴趣可以试试:)

shshsh_0510 发表于 2008-10-7 15:27:04

呵呵,糊涂了,用文件名就没必要编码了,直接把文件叫做:
12 3......1615.cpp
文件内容为main(){for(int i=1;i<192;i++)printf("%c",(i%24)?__FILE__:10);}即可

shshsh_0510 发表于 2008-10-7 16:05:54

刚试了一下,我为了对齐好算回车的位置,单位数间都隔2个空格,双位数隔一个空格,文件名居然又超过了windows的限制,最后是这样:
void test2(){
        for(int i=1;i<186;i++)printf("%c",(i%24)?__FILE__:10);
        printf(" 16 15\n");
}
最后两个额外打出
还能再短点么?:lol

liangbch 发表于 2008-10-7 19:18:47

原帖由 shshsh_0510 于 2008-10-7 16:05 发表 http://bbs.emath.ac.cn/images/common/back.gif
刚试了一下,我为了对齐好算回车的位置,单位数间都隔2个空格,双位数隔一个空格,文件名居然又超过了windows的限制,最后是这样:
void test2(){
        for(int i=1;i

呵呵,打印的字符都用文件名了,虽然不违规,但也够变态的,文件名这么长,让人看着不舒服。

gxqcn 发表于 2008-10-7 20:05:22

连文件名这种外围的东西都利用起来,
说明楼主对这个问题想得很深入,
当然功底自是没得说,更叫绝的是这种创造力!:b:
页: 1 2 3 4 [5]
查看完整版本: 打印螺旋方阵