【算法比赛】打印有变化规律的数字正方形,看谁的代码扩展性、可读性最好。

王集鹄 2008-08-26 01:18:44
加精
要求:
打印一组有变化规律的正方形(规则自己分析了)
如下是宽度为8的情况:
/*
01--02--03--04--05--06--07--08
|
28--29--30--31--32--33--34 09
| | |
27 48--49--50--51--52 35 10
| | | | |
26 47 60--61--62 53 36 11
| | | | | | |
25 46 59 64--63 54 37 12
| | | | | |
24 45 58--57--56--55 38 13
| | | |
23 44--43--42--41--40--39 14
| |
22--21--20--19--18--17--16--15
//////////////////////////////
01--02 06--07 15--16 28--29
/ / / / / / /
03 05 08 14 17 27 30 43
| / / / / / / / |
04 09 13 18 26 31 42 44
/ / / / / / /
10 12 19 25 32 41 45 54
| / / / / / / / |
11 20 24 33 40 46 53 55
/ / / / / / /
21 23 34 39 47 52 56 61
| / / / / / / / |
22 35 38 48 51 57 60 62
/ / / / / / /
36--37 49--50 58--59 63--64
//////////////////////////////
01--02 04 07 11 16 22 29
/> / / / / / /
03 05 08 12 17 23 30 37
/> / / / / / /
06 09 13 18 24 31 38 44
/> / / / / / /
10 14 19 25 32 39 45 50
/> / / / / / /
15 20 26 33 40 46 51 55
/> / / / / / /
21 27 34 41 47 52 56 59
/> / / / / / /
28 35 42 48 53 57 60 62
/> /> /> /> /> /> /
36 43 49 54 58 61 63--64
//////////////////////////////
01 09 23 35 45 53 59 63
\ \ \ \ \ \ \>
16 02 10 24 36 46 54 60
\ \ \ \ \ \ \>
29 17 03 11 25 37 47 55
\ \ \ \ \ \ \>
40 30 18 04 12 26 38 48
\ \ \ \ \ \ \>
49 41 31 19 05 13 27 39
\ \ \ \ \ \ \>
56 50 42 32 20 06 14 28
\ \ \ \ \ \ \>
61 57 51 43 33 21 07 15
\> \> \> \> \> \> \>
64 62 58 52 44 34 22 08
//////////////////////////////
64--63--62--61--60--59--58--57
|
37--38--39--40--41--42--43 56
| | |
36--35--34--33--32--31 44 55
| | |
17--18--19--20--21 30 45 54
| | | | |
16--15--14--13 22 29 46 53
| | | | |
05--06--07 12 23 28 47 52
| | | | | | |
04--03 08 11 24 27 48 51
| | | | | | |
01--02 09--10 25--26 49--50
//////////////////////////////
01--02--03--04--05--06--07--08
|
16--15--14--13--12--11--10--09
|
17--18--19--20--21--22--23--24
|
32--31--30--29--28--27--26--25
|
33--34--35--36--37--38--39--40
|
48--47--46--45--44--43--42--41
|
49--50--51--52--53--54--55--56
|
64--63--62--61--60--59--58--57
*/


输入:正方形的宽度Size(整数,范围2-9)
输出:一组宽度为Size的正方形

输入样例:8
输出样例:
01  02  03  04  05  06  07  08

28 29 30 31 32 33 34 09

27 48 49 50 51 52 35 10

26 47 60 61 62 53 36 11

25 46 59 64 63 54 37 12

24 45 58 57 56 55 38 13

23 44 43 42 41 40 39 14

22 21 20 19 18 17 16 15
-------
01 02 06 07 15 16 28 29

03 05 08 14 17 27 30 43

04 09 13 18 26 31 42 44

10 12 19 25 32 41 45 54

11 20 24 33 40 46 53 55

21 23 34 39 47 52 56 61

22 35 38 48 51 57 60 62

36 37 49 50 58 59 63 64
-------
01 02 04 07 11 16 22 29

03 05 08 12 17 23 30 37

06 09 13 18 24 31 38 44

10 14 19 25 32 39 45 50

15 20 26 33 40 46 51 55

21 27 34 41 47 52 56 59

28 35 42 48 53 57 60 62

36 43 49 54 58 61 63 64
-------
01 09 23 35 45 53 59 63

16 02 10 24 36 46 54 60

29 17 03 11 25 37 47 55

40 30 18 04 12 26 38 48

49 41 31 19 05 13 27 39

56 50 42 32 20 06 14 28

61 57 51 43 33 21 07 15

64 62 58 52 44 34 22 08
-------
64 63 62 61 60 59 58 57

37 38 39 40 41 42 43 56

36 35 34 33 32 31 44 55

17 18 19 20 21 30 45 54

16 15 14 13 22 29 46 53

05 06 07 12 23 28 47 52

04 03 08 11 24 27 48 51

01 02 09 10 25 26 49 50
-------
01 02 03 04 05 06 07 08

16 15 14 13 12 11 10 09

17 18 19 20 21 22 23 24

32 31 30 29 28 27 26 25

33 34 35 36 37 38 39 40

48 47 46 45 44 43 42 41

49 50 51 52 53 54 55 56

64 63 62 61 60 59 58 57


提供完整的控制台程序,扩展性、可读性最好的奖励200分,其他酌情散掉。
...全文
5700 269 打赏 收藏 转发到动态 举报
写回复
用AI写文章
269 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzb56 2012-09-09
  • 打赏
  • 举报
回复
没用过C#曾用c语言写过其中的一个类似的:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX 100000

void screw(int*a, int n);
void printArray(int*a, int n);

int main(int argc, char* argv[], char* env[])
{
int a[MAX] = {0,};
int i;
int n;

for(i=1; i<10; i++) {
n = i*i -1;
screw(a, n);
printArray(a, n);
}

return 0;
}


void screw(int* a, int n) {
int m;
int p;
int q;
int i;
int j;
int k;
int base;

m = (int)sqrt(n+1);
q = 0;
k = 0;

for(p=m; p>0; p-=2) {
base = m*q + q;

//上边
j=0;
for(i=0; i<p; i++) {
a[base+j*m+i] = k++;
}

//右边
i=p-1;
for(j=1; j<p; j++) {
a[base+j*m+i] = k++;
}

//下边
j=p-1;
for(i=p-2; i>=0; i--){
a[base+j*m+i] = k++;
}

//左边
i=0;
for(j=p-2; j>0; j--) {
a[base+j*m+i] = k++;
}

q++;
}
}

void printArray(int * a, int n) {
int i;
int m;

m = (int)sqrt(n+1);

for(i=0; i<=n; i++) {
if(i%m == 0) printf("\n");
printf("%2d ", a[i]);
}
printf("\n");

}


其实,是英伟达的一道笔试题:
http://blog.csdn.net/wzb56/article/details/7475001

Csharp_琪 2012-08-03
  • 打赏
  • 举报
回复
mark,学习
haoyue6311 2012-06-12
  • 打赏
  • 举报
回复
嘿嘿~~~
zwj891129 2011-12-30
  • 打赏
  • 举报
回复
来学习一下 楼主厉害啊
学习才进步 2011-09-02
  • 打赏
  • 举报
回复
学习中。。。
星小野 2011-09-02
  • 打赏
  • 举报
回复
学习了
wf727251593 2011-09-01
  • 打赏
  • 举报
回复
學習了
zhangzhen900530 2011-09-01
  • 打赏
  • 举报
回复
jf。。。。。
mikejodden 2011-07-22
  • 打赏
  • 举报
回复
Mark
lv106 2011-07-19
  • 打赏
  • 举报
回复
mark 学习
new_fengzi 2011-06-08
  • 打赏
  • 举报
回复
mark
ningyb 2011-05-24
  • 打赏
  • 举报
回复
有意思
VCACC 2011-05-17
  • 打赏
  • 举报
回复
搜藏先,慢慢思考
quppwang 2011-03-07
  • 打赏
  • 举报
回复
不会!! 关注!!收藏!!
dianyancao 2011-03-05
  • 打赏
  • 举报
回复
如果用数组解决是很低效的,用链表和树会好点。

需要具体分析 矩阵结构,呵呵
Sevencrimes 2010-11-29
  • 打赏
  • 举报
回复
学习了 收藏慢慢看
jxxqll 2010-10-22
  • 打赏
  • 举报
回复
好厉害啊....
cjh200102 2010-09-04
  • 打赏
  • 举报
回复
经典啊
yinfengyijian 2010-08-12
  • 打赏
  • 举报
回复
学习下!
httpftp 2010-07-30
  • 打赏
  • 举报
回复
回家看
加载更多回复(246)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧