找回密码
 欢迎注册
楼主: shshsh_0510

[擂台] 打印螺旋方阵

[复制链接]
发表于 2008-9-5 20:43:38 | 显示全部楼层
呵呵 mathe的C学的很精妙啊 什么书上这种细节多?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 06:33:03 | 显示全部楼层
我不是从书上学的,基本上都是网络上看的。主要是我接触c语言的时间比较长。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 08:59:47 | 显示全部楼层
哦 超过13年了么? 如果没超过,就不叫长 不过,你学的真不错
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 10:42:12 | 显示全部楼层
为什么13年? 超过了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 14:05:28 | 显示全部楼层
呵呵 92年试图学C 没学成 学的Pascal 工作后,95年学会的 所以说这个 看来你高中就学了C了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 15:52:06 | 显示全部楼层
大学才学的。 看来你开始试图学C比我早。 我高中开始学过BASIC,然后大学开始学过FORTRAN,8086汇编,PASCAL. 反而C语言稍微迟一些。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-6 17:35:48 | 显示全部楼层
一样的顺序 呵呵 C的逻辑不如Pascal清晰 语法不如Basic简单 趣味性不如汇编 呵呵 反正一开始看不懂
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-8 09:22:27 | 显示全部楼层
呵呵,大家学的都差不多嘛,而且顺序也都一样,我没学pascal,而是51汇编。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-9 09:30:29 | 显示全部楼层
按照以前的思路,将代码重写了一遍,虽然代码数量依然不及楼主,但是不失为一种很好的算法。
  1. #include "stdio.h"
  2. #define N 8
  3. int main(int argc, char* argv[])
  4. {
  5. int inc[]={1,0,0,1,-1,0,0,-1};
  6. //inc[0]:表示向右方向x增量
  7. //inc[0+1]:表示向右方向y增量
  8. //inc[2]:表示向下方向x增量
  9. //inc[2+1]:表示向下方向y增量
  10. //inc[4]: 表示向左方向x增量
  11. //inc[4+1]:表示向左方向y增量
  12. //inc[6]:表示向上方向x增量
  13. //inc[6+1]:表示向上方向y增量
  14. int s[N+2][N+2]={0};
  15. int i,x,y,d;
  16. for (i=1;i<=N;i++)
  17. {
  18. s[0][i]=1; //上边加围墙
  19. s[N+1][i]=1; //底边加围墙
  20. s[i][0]=1; //左边加围墙
  21. s[i][N+1]=1; //右边加围墙
  22. }
  23. x=1;
  24. y=1;
  25. d=0; //d表示方向,0:表示向右走,2:表示向下走,4:表示向左走 6:表示向上走
  26. for (i=1;i<=N*N;i++)
  27. {
  28. s[x][y]=i;
  29. if (s[x+inc[d]][y+inc[d+1]]>0) //下一个位置已填充或者是围墙
  30. {
  31. d+=2; //改变前进方向
  32. d&=7; //if d>=8,d-=8
  33. }
  34. x+=inc[d];
  35. y+=inc[d+1];
  36. }
  37. for (y=1;y<=N;y++)
  38. {
  39. for (x=1;x<=N;x++)
  40. {
  41. printf("%3d",s[x][y]);
  42. }
  43. printf("\n");
  44. }
  45. return 0;
  46. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-9 09:31:43 | 显示全部楼层
// 以下代码重新编排的格式,主要有 // 1.简化了main函数的定义,并且不用return 语句,如在VC中编译,必须保存为c文件,而不是cpp // 2.采用单字母变量名 // 3.使用等号,将多个赋值语句改为一个赋值语句 // 4.将多个变量定义语句改为1个变量定义语句。 // 5.去掉了对头文件的包含。 // 6.将for语句中的printf("\n")移动for语句括号内,并去除了“{}” // 7.重新进行了排版,将多行语句排在同一行 // 如果将“#define N 8”去掉,还可以节省几个字符,但失去了灵活性
  1. #define N 8
  2. main()
  3. {
  4. int i=1,x=1,y=1,d=0,s[N+2][N+2]={0},u[]={1,0,0,1,-1,0,0,-1};
  5. for (;i<=N;i++) s[0][i]=s[N+1][i]=s[i][0]=s[i][N+1]=1;
  6. for (i=1;i<=N*N;i++) { s[x][y]=i; if (s[x+u[d]][y+u[d+1]]>0) d=(d+2)&7; x+=u[d]; y+=u[d+1]; }
  7. for (y=1;y<=N;y++,printf("\n")) for (x=1;x<=N;x++) printf("%3d",s[x][y]);
  8. }
复制代码

评分

参与人数 1鲜花 +5 收起 理由
shshsh_0510 + 5 学习

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 02:12 , Processed in 0.027664 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表