免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Send_linux
打印 上一主题 下一主题

ChinaUnix“C语言代码”开发大赛!获奖名单公布!(奖品积分已经添加,请大家查收!) [复制链接]

论坛徽章:
0
141 [报告]
发表于 2009-02-26 22:49 |只看该作者
想参加没实力  我推荐我同学来参加

论坛徽章:
0
142 [报告]
发表于 2009-02-28 23:54 |只看该作者
原来有这么一个大赛啊,我也想来凑热闹,不知是否还来的及,呵呵

论坛徽章:
0
143 [报告]
发表于 2009-03-01 09:41 |只看该作者
也来发个第一题的解答




  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         int row=3,col=5;
  5.         int a[row][col];       
  6.         int n=0;
  7.         int i,j;
  8.         enum direction {right,down,left,up};
  9.         enum direction f = right;

  10.         for(i=0;i<row;i++)
  11.                 for(j=0;j<col;j++)
  12.                         a[i][j]=0;
  13.         i=j=0;
  14.         int total = row*col;
  15.         while(1)
  16.         {
  17.                 if(n >= total )
  18.                            break;
  19.                 a[i][j]=++n;
  20.                 switch(f)
  21.                 {
  22.                         case right:
  23.                                 if(j+1 >col-1 || a[i][j+1] > 0)
  24.                                 {
  25.                                         f++;i++;
  26.                                 }
  27.                                 else
  28.                                         j++;
  29.                                 break;
  30.                         case down:
  31.                                 if(i+1>row-1 || a[i+1][j] >0)
  32.                                 {
  33.                                         f++;j--;
  34.                                 }
  35.                                 else
  36.                                         i++;
  37.                                 break;       
  38.                         case left:
  39.                                 if(j-1<0 || a[i][j-1] > 0)
  40.                                 {
  41.                                         f++;i--;
  42.                                 }
  43.                                 else
  44.                                         j--;
  45.                                 break;
  46.                         case up:
  47.                                 if(i-1< 0|| a[i-1][j] > 0)
  48.                                 {
  49.                                         f=right;j++;
  50.                                 }
  51.                                 else
  52.                                         i--;
  53.                                 break;

  54.                 }
  55.         }
  56.         for(i=0;i<row;i++)
  57.         {
  58.                 for(j=0;j<col;j++)
  59.                         printf("%-d\t",a[i][j]);
  60.                 printf("\n");
  61.         }
  62.         return 0;
  63. }
复制代码

论坛徽章:
0
144 [报告]
发表于 2009-03-01 12:55 |只看该作者
来晚了,今天才看到。。。

论坛徽章:
0
145 [报告]
发表于 2009-03-01 19:19 |只看该作者
我也来传一个
第一题

01.rar

833 Bytes, 下载次数: 33

论坛徽章:
0
146 [报告]
发表于 2009-03-01 23:43 |只看该作者

我也谈谈我的感受吧~

一直都认为学习编程最重要是学习编程的思想而不是学习语言的特性。有很多学Java的人以为自己很了不起,自己编程的水平很高,时时看不起学其他语言的程序员。但是本人觉得Java的语言特性已经把编程的一些重要的思想忽视了,好像是数据结构,而且算法也显得不是那么的重要,取而代之的是设计模式,复杂的类关系。

一个好的程序员一定要学好算法和数据结构,而这两者最能在C语言中体现出来,可能学Java的人永远都不知道数据结构的重要性,因为Java语言已经把很多的数据结构封装起来了。所以学好编程,就要学好C语言。

看一本书好不好,我首先是看看目录,从《C程序设计思想与方法》的目录看来,本书非常注重编程的思想!“程序的优化”,“程序的风格、结构和组织这”这些章节都体现出本书对编程思想的要求是很高的,而且从目录看出本书对C语言的介绍还是非常的到位,而且教学组织很好(从“指针、数组、结构和类型”这章中可以看出,因为把指针、数组、结构和类型结合才能创造更好的数据结构)。

看了第八章,觉得作者很牛逼,因为作者在“运行效率的改进策略和方法”这章中非常深刻的分析了优化代码的原理,对一些经典的算法(Antiprime算法等)的改进,而且对《The C programming Language》这本经典C语言书籍作出了挑战(优化了当中的一些例子)。而且作者也介绍了“用空间换时间”这个优化方法,优化了经典的华容道求解程序优化,形象易懂,而且也很有效。另外,在本章之中介绍了很多其他的优化代码方法好像:改进数据结构,编译优化选项,空间效率的改进方法等等,这些都是很好的优化方法!

另外,我也看了看第二章。第二章最主要是介绍程序设计的方法,阐述的是编程时应该如何去分析和怎么解决!从问题的分析到方案的设计然后是算法和数据结构的选择都一一详细的介绍了。而且其后还介绍了后期代码的维护和调试。所以这一章对于那些没有编程经验的人来说是非常有用的,从中可以学到很多其他教导C语言的书中不能学到的东西!所以非常超值!一个好的程序员就应该懂得如何去分析编程时出现的问题,而本书就是传导这样的思想!!

从这些章节可以看出本书是一本很好的C语言提高的书籍,也是一本很好的学习编程思想书籍,而且也可以很好地提高编程思想。很适合我们这些刚学C语言的初学者,因为本人学过VB和Java,所以看起本书来特别有味道。另外要评价一本书是否是好书还是要从那本书面向的是什么读者,对那些读者有没有用处等,《C程序设计思想与方法》能够很好的提高程序员的思维,所以这本书是本好书!!值得推荐!!

[ 本帖最后由 liexusong 于 2009-3-3 08:50 编辑 ]

论坛徽章:
0
147 [报告]
发表于 2009-03-02 00:38 |只看该作者

回复 #1 Send_linux 的帖子

我也来试试 :)

开发环境为 Ubuntu 8.04.2,内核为 2.6.24-23,IDE 为 gvim 7.1,编译器为 gcc 4.2.4,编译参数为 -Wall -O2

每个题目放在一个归档压缩包里,文件名为 QXX.tar.gz,包含以下文件: (其中XX为题目编号)
QXX.txt  题目分析
QXX.c    源程序
QXX      可执行文件
in.txt   输入文件
out.txt  输出文件
说明.txt  本说明

希望与各位朋友多多交流,共同进步

第一题
[题目]
给定一个整数N,生成一个N*N的矩阵,矩阵中元素取值为1至N2,1在左上角,其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内容如下:
1     2     3     4
12    13    14    5
11    16    15    6
10    9     8     7

[分析]
这种矩阵可以称为螺旋矩阵,有很多种看待这个矩阵的方式。这里我将该矩阵看成是很多口字形数字圈的嵌套体。这些口字数圈由大到小,一个套一个,最终形成本题的螺旋矩阵。
所以如果我们能够依次“画”出各数圈,那么就可以得到这个螺旋矩阵。
所以我的解法思路分两步:
1。拆数圈。确定当前要填充的数圈的个数。
2。填数圈。按顺时针方向依次填充各数圈。

第一步,根据题目,如果 N 为偶数,则矩阵将有 N/2 圈;若为奇数,则有 N/2 圈,此外还有一个中心数字。我们设最外圈为第 1 圈,向里递增。
第二步,这步当中,我们都是从左上角开始顺时针填充,重要的就是确定数圈的边界,有左、右、上、下四个边界。而通过简单的观察不难发现,在第 n 圈的时候,左边界为 i,右边界为 n-i+1,上边界为 i,下边界为 n-i+1。填充的时候再分四步,每次填口字的一边,但注意的是不是填满,而是留下每边的最后一个数字不填,作为下条边的开始(当然也可以填满或者用别的方式,这是一个策略选择的方式)。

将上面两步作为一个循环,循环次数就是圈数。当循环结束时,必要时再添加中心数,我们应该就得到了所求的矩阵。

[算法]
根据上面的分析,我们可以用模拟的方法,模拟以上过程即可。

[程序]
考虑到输出的美观性,输入的 N 限制不能大于30。
参考 Q01.c。

[ 本帖最后由 xyywll 于 2009-3-2 01:17 编辑 ]

Q01.tar.gz

6.48 KB, 下载次数: 38

第一题,哈,忘记free()了,赶紧补上 :)

论坛徽章:
0
148 [报告]
发表于 2009-03-02 20:11 |只看该作者
来晚了!!凑个数吧!

1.rar

11.07 KB, 下载次数: 42

第一题

论坛徽章:
0
149 [报告]
发表于 2009-03-03 12:23 |只看该作者
编译环境,Ubuntu8.04 gcc 4.4
我3月1号才发现,这两天就写了两道题,就先写这两道题了,重在参与嘛!

代码.zip

12.96 KB, 下载次数: 34

论坛徽章:
0
150 [报告]
发表于 2009-03-03 23:00 |只看该作者
第一题

MacOS X 10.5 Darwin Kernel Version 9.6.0
gcc version 4.0.1 (Apple Inc. build 5488 )

[ 本帖最后由 dangk 于 2009-3-3 23:56 编辑 ]

1.tar.gz

3.47 KB, 下载次数: 34

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP