博文

简评电脑报(2005-09-18 20:20:00)

摘要:简评电脑报 今年看的比较多的电脑报,特别是综合版、网络版和软件版,对综合版的新闻,人物的报道觉得很不错,网络版的一些规划也不错,比如一些无线、有线局域网的搭建讲得也还不错(虽然比较初级)。 不过明显电脑报的软件版的编辑人员很、非常不负责任,表现在: 主要针对里面的一个小板块:编程点将台 1.编程点将太有时给漏掉了,(即使是故意的也应该说明一下);————这个情况今年我见过2次
2.把编程点将漏掉以后就把答案的顺序公布错了(本来是隔一周,结果应该变成隔两周,但是仍然按隔一周公布,这样就相当有一期没有评奖)————这个情况今年我看过一次
3.电脑报今年投稿邮箱全部更换,但是更换后的大约一个月,有一期的电脑报的软件版竟然还使用旧的邮箱——今年见过一次;
4.今年的编程点将的题目几乎都是来自网上一直流传的“c语言程序编程百例”,这样造成两点后果:
(1)、有些获奖程序直接照搬里面的答案,甚至连注释都完全一样——比如34期(听说做错了,呵呵,我没有认真看,我都是自己编的)
(2)、有些流传着的题目本身就是错的,比如36期,我认为这期是没有答案的,因为题目原本的意思根本就不是那样,而是:我认为应该是:
第一个3位数,是第三个3位数的三倍,而第二个数是第三个数的两倍。 而这题的原来的“c程序设计百例”就是这个错误的题目,但是里面的答案是按我改的那个设计的。详见我的blog:
xiangyu.programfan.com 5.编程点将有些评选出来的答案根本就不能让人满意,首先重要的一点就是扩展性不好,很多人设计的程序只能针对题目所给的规模。——见过许多期 6.我猜测评奖的时候基本上看的程序只有最先发给编辑的前面20个,基本上以后发的程序只是形式上说是照顾晚拿到报纸的读者,但是其实这些读者即使把程序发过去,可能也只是徒劳…………呵呵,我估计的,错误的话请编辑原谅。因为我也参与了许多次,自认为有些程序比获奖程序优秀,但是从来没有获得奖;还有一点就是基本上每一期的获奖者都有北京或上海的,因为北京一般是下周的电脑报,这周六就可以拿到。我以前在厦门的时候,这周的报纸要周三才能拿到,当然这时参与的程序就晚了…… ......

阅读全文(4832) | 评论:3

北京大学杨芙清院士(2005-09-16 18:04:00)

摘要:比尔.盖茨最想见的女科学家  (《中国青年报》1999年12月13日,郭洪波) 杨芙清简介
  杨芙清,女,1932年生于江苏省无锡市。1955年毕业于北京大学数学力学系。
  1957年至1959年赴前苏联学习程序设计和计算机软件。1962年至1964年,杨芙清以中国专家身份被国家派往莫斯科杜勃纳联合核系物理所计算中心工作。归国后一直在北大任教,1983年任教授,1991年当选为中科院院士。
  七十年代。她研制成功我国第一个规模大、功能强、支持多道程序运行的计算机(150机)操作系统。这一成果大大缩短了我国与先进国家的差距。该成果荣获1978年全国科学大会奖。
  七十年代中后期,她又主持研制成功我国第一个全部用高级语言书写的操作系统——DJS240机操作系统,获电子工业部科技成果一等奖。
  1986年,杨教授主持研制成功的国家重点科技攻关课题《软件工程核心支持环境BETA—85》,获电子工业部科技成果一等奖。北京地区优秀软件一等奖。
  杨芙清教授另一突出贡献是组织了全国22所高等院校和科研单位,380多名科技人员,经过十几年的艰苦创新历程,终于研制成功大型软件开发环境青鸟系统。它是我国第一个大规模、综合性的软件工程环境,不论在集成度,还是对软件开发的支持力度等方面,都达到或超过了九十年代国际先进水平。短短几十年的时间,计算机以迅速之势走进了工厂、机关学校和家庭。286、386、486、586,当人们使用电脑、享受电脑的恩惠时,可曾知道和想到为此作出突出贡献的我国第一位从事计算机软件研究的女科学家、中国科学院院士、北京大学计算机科学与技术系系主任杨芙清教授又在为软件的工业化生产进行研究。她因是中国第一个研制出可支持高级语言及多道运行的操作系统,第一个研制出用高级语言书写的操作系统,第一个研制出初具规模的软件工程支撑环境……而被美国名人录列为世界最杰出的5000人之一,被英国名人录中心列为终身研究院士、被列入澳洲和远东名人录。
  1993年,世界微软大王、美国微软公司总裁比尔.盖茨首次来华访问时,他向中国郑重提出了他最想拜访的两位科学家:一位是德高望重的科学界老前辈周光召,另一位就是著名的女科学家杨芙清。
  杨芙清教授在北京大学接待了大名鼎鼎的微软总裁比尔.盖茨参观了青鸟工程展览室之后,他承认中国的软件开......

阅读全文(7648) | 评论:1

2005年9月12日电脑报第36期编程点将(2005-09-12 20:45:00)

摘要:2005年9月12日电脑报第36期编程点将 题目:请编程实现将1到9 这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍。问应当怎样分法。
首先,我认为题目是错的。 原题:请编程实现将1到9 这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍。   按这样编的话应该是没有结果的, 我认为应该是: 第一个3位数,是第三个3位数的三倍,而第二个数是第三个数的两倍。   按修改后的题目:以下是我的程序:   程序的主要思想参考我的c语言程序设计百例的第60题,不过里面的题目也是错的,好像电脑报今年的编程点将有90%取自里面的题目。   /*算法思想:根据题意,最小的三位数m可能是在123-333之间,因此循环取尽这些值,
并由此计算出最大的三位数为:3*m,第二个数为:2*m(按原题应该是:3*m/2)。然后判断每个三位数
的各个位是否有重复,没有的话就完成了任务。当然,可能的分发不止一种,
我们采用count来计算可能的分法并输出来
*/
#include<iostream>
using namespace std;
int ok(int t,int *z);//判断每个三位数的各个位是否已经被取过
int A[9];//存放从小到大的三个三位数的各个位
void main()
{
 int m,count=0;
 for(m=123;m<=333;m++) /*最小的三位数的可能值*/
  if(ok(m,A)&&ok(2*m,A+3)&&ok(3*m,A+6)) /*若满足题意*/
   cout<<"第"<<++count<<"种可能的三个数是:"<<3*m<<" "<<2*m<<" "<<m<<"\n";
} int ok(int t,int *z) /*取得t的各个位的值,将其存入z指向的三个数......

阅读全文(5821) | 评论:5

2005年5月2日第17期电脑报编程点将(2005-09-10 21:15:00)

摘要:2005年5月2日第17期电脑报编程点将

题目:十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小

孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个

小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问

经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?


我的程序:(这道题在我的c语言程序设计百例里面的第75题)
/*这道题看起来简单,但是其实要一次完全做完整不不是很容易。
当然,这题目本身就有点歧义:起初我是这样理解的:第一个人把一半糖给第二个人,
然后第二个人检查一下糖是不是偶数,不是的话就再要一个糖,
然后再把总的糖分一半给第三个……后来发现这样做没有答案。

我的答案和获奖程序一基本上是一样的,主要的不同点在我的程序的注释的部分。
算法的思路比较简单就不分析了。
*/

#include<iostream>
using namespace std;
void main()
{
    const int n=10;
    int child[n]={10,2,8,22,16,4,10,6,14,20};
    int temp,i,count=0;
    bool tag=true;//标志分配完后是否每个数值都是相等的,相等时为false,不等时为true
    while(tag)
    {
        count++;
       &nb......

阅读全文(4416) | 评论:0

2005年4月25日第16期电脑报编程点将(2005-09-10 20:03:00)

摘要:2005年4月25日第16期电脑报编程点将

题目:小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

我的程序:
/*算法思想:其实这是一个排列的问题,这里我们假设五本书的编号室从1——5,
用数组ABC[3]来表示A,B,C三个人,其数值表示这三个人所借的是什么书
(也就是哪个编号的书)。穷举使三个人都可能借到每一本书,
当然,不能两个人借同一本书。

*/
#include<iostream>
using namespace std;
void main()
{
    int ABC[3],count=0;
    for(ABC[0]=1;ABC[0]<=5;ABC[0]++)
        for(ABC[1]=1;ABC[1]<=5;ABC[1]++)
            for(ABC[2]=1;ABC[2]<=5;ABC[2]++)
                if(ABC[0]!=ABC[1]&&ABC[0]!=ABC[2]&&ABC[1]!=ABC[2])
                    count++;
    cout<<"总的借书方式有:"<<......

阅读全文(4072) | 评论:0

一位高级程序员给学弟学妹的建议(来自本blog)(2005-09-10 14:16:00)

摘要:一位高级程序员给学弟学妹的建议1&nbsp;

来自本blog,作者:glacier---向C++进军

转载这篇文章,我只是觉得这文章写得还不错,

一位高级程序员给学弟学妹的建议1   
2004-6-8 星期二(Tuesday) 晴   
  我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。

几个误区  
初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:
认为计算机技术等于编程技术:
有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到......

阅读全文(2128) | 评论:0

2005年暑期学习总结(2005-09-10 18:45:00)

摘要:2005年暑期学习总结:
   总体而言,今年的暑期过得有点堕落,不过也学到一点知识,做了一些自认为有用的事情。主要收获有以下几点:
   (1)基本上把思科的CCNA的课程理解了一遍,不过,对于路由器、交换机的配置由于缺乏实际操作,现在倒也忘记了不少;
    当然,具体的路由器、交换机的配置倒也不是很重要,关键是对基本原理的掌握更重要一点。

    (2)复习了C++语言,加深对C++语言一些高级特性的理解;
     
     (3)通过做每一期电脑报中的“编程点将台”来加深对一些基本算法的学习,理解。如:回溯,排列组合算法

     (4)教一小孩海龟作图(logo语言),其实我以前没有学过这个东东,但是由于是一门简单的语言,我觉得完全可以胜任就接下来了(我还没看过教材^_^)。不过,还好没有误人子弟,如我所料,我通过两天的自学,掌握了里面命令的运用(因为基本算法思想是一样的,比如循环,递归)。......

阅读全文(6284) | 评论:4

2005年8月22日第33期电脑报编程点将(2005-09-09 23:54:00)

摘要:2005年8月22日第33期电脑报编程点将
题目:某侦察队接到一项紧急任务,要求在A,B,C,D,E,F六个队员中尽可能多挑若干个人去完成任务,但有以下限制条件:
(1)A和B两人中至少去一个;
(2)A和D不能一起去;
(3)A、E和F三人中要派两个人去;
(4)B和C都去或者都不去;
(5)C和D两人中去一个;
(6)若D不去,则E也不去。
请用程序求出应该让哪几个人去?

我的分析和程序:

/*用整数a,b,c,d,e,f来表示这六个人去或者不去,值为0代表不去,值为1代表去。用循环让这六个数可以取遍0和1,
当满足题目所要求的条件就显示出来,题目中的条件可以通过下面的来判断:
(a||b)==1//条件(1)
&&(a&&d)==0//条件(2)
&&(((a&&e)==1&&f==0)||((a&&f)==1&&e==0)||((e&&f)==1&&a==0))//条件(3)
&&(b==c)//条件(4)
&&(c!=d)//条件(5)
&&(e<=d))//条件(6)
*/

初步程序:————这里没有考虑题目中的:尽可能多挑选若干个人去。也就是人应该尽量多
该程序在VC++6.0通过运行,结果:可以叫下面的人去:A  B  C  F

#include<iostream>
using namespace std;
int AA[6];
char BB[]={'A','B','C','D','E','F'};
void main()
{
    int &a=AA[0],&b=AA[1],&c=AA[2],&d=AA[3],&e=AA[4],&f=AA[5......

阅读全文(4853) | 评论:1

2005年9月5日第35期电脑报编程点将台(2005-09-10 18:44:00)

摘要:2005年9月5日第35期电脑报编程点将台

题目:构造N*N阶的拉丁矩阵(2<=N<=9),使方阵中的每一行和每一列中的数字1到N只出现一次。如N=4时:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3

我的程序:
/*算法思想:
通过观察,我们可以发现规律就是:第一行从1开始递增直到n,
第二行从2开始递增,当超过n是就得到其与n的模加上1即可,
以此类推直到完成所有的排列。

  我的程序的问题:没有考虑所有可能的情况,只是根据已有的得出规律
  其实相当于是不完全归纳法。不过,要是想得出所有可能的情况的时间复杂度将比较大


*/
#include<iostream>
using namespace std;
void main()
{
    int i,j,n;
    const int maxsize=9;
    int AA[maxsize][maxsize];
    cin>>n;
    if(n<2||n>9)
    {
        cout<<"You are wrong!";
        return ;
    }
    for(i=0;i<n;i++)//初始化
       &......

阅读全文(4319) | 评论:0

2005年5月16日第19期电脑报编程点将台(2005-09-09 22:45:00)

摘要:2005年5月16日第19期电脑报编程点将台

题目:三对情侣参加婚礼,三个新郎为A,B,C,三个新娘为X,Y,Z。有人不知道谁和谁结婚,于是询问了六

个新人中的三人,但是听到的回答是这样的:A说他将和X结婚;X说她将的未婚夫是C;C说他将的Z结婚。

这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。


我的程序:

/*算法思想:对三个新娘分别分别新郎,当满足以下条件时就输出:
X!='A'&&X!='C'&&Z!='C'表示三个假话,&&X!=Y&&X!=Z&&Y!=Z
表示每个新娘的新郎都不一样(^_^也就是没有一妻多夫)

  我的程序的时间复杂度是:n的三次方,所以不是很好,
  但是要是直接从题目中推理然后去掉一些可能性后再配对的话,
  那么其实马上可以得出答案,也就是这题其实出得很差得,完全没
  必要用计算机来推理。

  在我的程序的后面是那期获奖的两个程序。大家可以参考。不过,感觉我的程序
的可读性比较好,获奖的程序我也看了很久理解什么怎么得出来的。
*/
#include<iostream>
using namespace std;
void main()
{
    char X,Y,Z;
    for(X='A';X<='C';X++)
        for(Y='A';Y<='C';Y++)
            for(Z='A';Z<='C';Z++)
   ......

阅读全文(3946) | 评论:0