博文

程序员成功之路(2007-02-23 12:58:00)

摘要:程序员成功之路 ——The road ahead for programmer(演讲稿) 来自csdn: http://blog.csdn.net/feixiangzaici/archive/2007/01/22/1490454.aspx 一、我很羡慕在座的各位同学,因为你们是中国未来的程序员,而我不是,我一直很遗憾。比尔盖茨曾经写过一本书叫做《未来之路》The road ahead, 那么今天我选择这样一个题目,the road ahead for programmer, 程序员的未来之路,也就是程序员的成功之路,希望大家未来也能够拥有像比尔盖茨一样的智慧的头脑和开一家像微软一样的公司。俗话说:心有多大,人生的舞台就有多大!二、最近看了几篇csdn上的漫漫人生路专辑,很有感触,这里摘抄了几句,非常愿意和大家分享, 优秀程序员的心里话:编程的原因是喜欢,不是为了别的。 从摸上电脑的那一刻,我就知道,这才是我的世界。我一心一意地想作个程序员,尽管知道很累。人真的不能轻言放弃,否则,失去的永远无法挽回!生命是一种长期而持续的累积过程 所有成功的人都有一个不变的黄金法则: 积累!与 坚持!大家听了这些话,不知道是怎样的想法呢?提问,(1)你以前有没有读过这样的文章或有没有程序员跟你说过这样的感受?(2)你怎样看待程序员这个职业?你有这种感觉吗?上面的话其实都在说明一个道理,只有全身心地投入,写程序才会有意思,才会体会到其中的乐趣。电脑的世界其实很大,程序员是活在自己想象的王国里。你可以想象到电脑里细微到每一个字节、每一个比特位的东西。通过电脑可以实现你的设想,解决你的问题。电脑远没有人那么复杂,如果程序写得好,你就可以和电脑处好关系,就可以指挥电脑干你想干的事。每每你坐在电脑面前,这个时候你是十足的主宰。理想和梦想,比尔盖茨自从见到了计算机这个东西,就想象有一天个人计算机将是每一部办公桌面系统以及每一家庭的必备的工具,并为这一信念所指引,开始为个人计算机开发软件。三、程序人生:可以把程序作为你的人生,也可以把你的人生当作程序来设计。你的父母把你生下来,你的身体就是一台计算机,而上面运行的软件......

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

猪的安家(2007-02-22 21:27:00)

摘要: #include <cstdlib>  #include <iostream>    using namespace std;    struct number  {   int a;   int b;   };    int main(int argc, char *argv[])  {   int num,times,i;   number n[10];   cout<<"please input the times Andy built the hogpen(<=10):";   cin>>times;      cout<<"please input the numbers of the hogpens(ai) and the remain pigs(bi):"<<endl;   for(i=0;i<times;i++) cin>>n[i].a>>n[i].b;   i=0;num=n[0].a;   while(i<times)   {   if(n[i].b==num%n[i].a) i++;   else{ if(i>0){num+=n[i-1].a;i=0;}else num++; }   }   cout<<"the number of pigs is:"<<num<<endl;   system("PAUSE");   return EXIT_SUCCESS;  } 题目描述:猪的安家这道题目就是要求解模线性方程组。设 n=n1× n2×。。。×nk;m1=n/n1;m2=n/n2;。。。 mk=n/nk;由于mi与ni互质,即可以求解模线性方程。gcd(ni,mi) = ni×x + mi×y=1 求出x和y,y即mi的负一次方;ans = (ans + M * y * A[i]) % n; #i nclude<string.h>#i nclude<stdio.h> typedef long long i64; int num;i64 NN;i64 A[20],N[20]; void ext_euclid( i64 a, i64 b, i64 &x, i64 &y ){ i64 t, d; if (b == 0) { x = 1; y = 0;......

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

猫捉老鼠(2007-02-22 14:47:00)

摘要:一只猫和一只老鼠在10*10的迷宫中。迷宫中的每个方格可以是空的,或者含有障碍。猫和老鼠可以进入任意一个空的方格中。当他们相遇时,猫和老鼠在同一个方格中。但是,无论猫或老鼠都不能进入有障碍的方格。我们可以用字符组成的二维数组表示迷宫,如下图所示。 老鼠在迷宫中按照一种固定的方式行走:每个时刻,老鼠都向它所面对的方向前进一格,这需要花费1秒时间。如果前方是一个障碍或者是迷宫的边界,它将花1秒的时间按顺时针方向转90度。为了抓到老鼠,这只猫决定也按照与老鼠相同的行走方式行进。猫和老鼠在每个单位时间内是同时行动的。因此,如果猫和老鼠在行进过程中“擦肩而过”,猫是无法捉到老鼠的。只有当猫和老鼠同时到达一个相同的格子时,猫才能捉住老鼠。 初始时,猫和老鼠不会在同一个方格中。并且它们都面向北方。你的任务是编一个程序,求出猫捉到老鼠的所花时间。 输入输出格式 输入数据的第一行n,表示输入数据的组数。每组数据由10行组成,每行10个字符,表示迷宫的地图以及猫和老鼠的初始位置。输入数据保证只有一只猫和一只老鼠。每组输入数据之后均有一个空行作为间隔。 对于每组给定的输入,输出一行仅含一个数,即猫捉到老鼠所花的时间。如果猫永远都无法抓到老鼠,则输出0。 样例输入1 *...*..... ......*... ...*...*.. .......... ...*.c.... *.....*... ...*...... ..m......* ...*.*.... .*.*...... 样例输出49/*C++版*/#include<iostream>using namespace std;struct NODE{ int row; //行    int line;//列};int main(){ char mapx[12][12]; int i,j,k,n,foot,mouse_dir,cat_dir; struct NODE cat,mouse;    cin>>n; for(i=0;i<n;i++) {  foot=0;//时间(步数)刚开始为0  //以下定义方向......

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

C语言(转)(2007-02-22 10:33:00)

摘要:◆经典C源程序100例:http://post.baidu.com/f?kz=8618367  ◆时钟的驻留程序:http://post.baidu.com/f?kz=10822377  ◆数据结构暨若干经典问题和算法:http://post.baidu.com/f?kz=10922856  ◆LIUXUY 磁盘系统源程序:http://post.baidu.com/f?kz=12973347  ◆RLE压缩:http://post.baidu.com/f?kz=12592570  ◆快速排序:http://post.baidu.com/f?kz=12262349  ◆全排列的递归算法:http://post.baidu.com/f?kz=12248706  ◆KMP字符串搜索算法:http://post.baidu.com/f?kz=12143581  ◆C高效编程四招:http://post.baidu.com/f?kz=13192245  ◆无栈非递归二叉树遍历:http://post.baidu.com/f?kz=12394188  ◆跟我学NETBSD内核源码:http://post.baidu.com/f?kz=12201581  ◆Linux源码:http://post.baidu.com/f?kz=12692827  ◆C语言中不定参数的实现http://post.baidu.com/f?kz=19232306  ◆一个有关 FreeBSD 的网站:http://post.baidu.com/f?kz=14828500  ◆c51系列仿真器:http://post.baidu.com/f?kz=14332652  ◆brainf*ck 语言的解释器http://post.baidu.com/f?kz=15998145  ■■■■■■■____简单应用____■■■■■■■   ......

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

happy 2004(2007-02-22 10:30:00)

摘要:#include<iostream>using namespace std; int left2[29],left3[29],left167[29]; int left(int i,double x){ if(x>28)  x=x-(int)(x/28)*28; switch (i) { case 2: return left2[(int)x-1]; case 3: return left3[(int)x-1]; case 167:return left167[(int)x-1]; } return 0;}   int happy2004(double x){ if(x>28)  x=x-(int)(x/28)*28; if(x==1)  return 6; else {   int n1=0,n2=0,n3=0,n4=0,n5=0,cash1=0,cash2=0;  cash1=(29-((left(3,x+1)-1)*14)%29)%29;  cash2=(29-(left(167,x)-1)*11%29)%29;  n1=((left(2,2*x+1)-1)*cash1*left(167,x))%29;  n2=(left(2,2*x-1)*cash1*cash2)%29;  n3=(2*n2)%29;  n4=(left(3,x)*(left(2,2*x-1)-1)*cash2)%29;  n5=happy2004(x-1);  return (n1+n2+n3+n4+n5)%29; }} int main(int argc, char* argv[]){ int i2=2,i3=3,i167=22;       double n;     &......

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

Number Triangle(2007-02-21 20:31:00)

摘要:Consider the number triangle shown below. Write a program that calculates the highest sum of numbers that can be passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 In the sample above, the route from 7 to 3 to 8 to 7 to 5 produces the highest sum: 30. Input There are multiple test cases.The first line of each test case contains R (1 <= R <= 1000), the number of rows. Each subsequent line contains the integers for that particular row of the triangle. All the supplied integers are non-negative and no larger than 100. Output Print a single line containing the largest sum using the traversal specified for each test case. Sample Input5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Sample Output30 Original: IOI 95   #include<iostream>using namespace std; int maxn(int a,int b......

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

计算机专业生应该学什么(2007-02-19 16:29:00)

摘要: 收到一封mail,是一个计算机系大三学生写来的,想听听我的建议,面临将要毕业的关口,应该学点什么才能对将来有用。随后又有不少朋友通过mail,im等等方式询问我对这个问题的看法。想必是上次csdn视频聊天的节目引起了不少朋友的思考。 我本来不是计算机专业出身,也并非大师之类的人物,本来不敢好为人师。不过,既然作了这个行业,也算有点心得,被问到,也就说点心得和建议,对与不对,各位看官指教。盖个体情况差距极大,本文是个人观点,也就姑且一听,有用则用,当然,这世上怕也没有所谓万全之策的。 1 你是否真的喜欢计算机 我是真的喜欢的。如果让我选择发了大财做什么,我仍然继续玩计算机,只不过可以更自由自在的玩喜欢的东西。如果你也喜欢,喜欢学新的东西,喜欢复杂而精巧的设计,喜欢工程之美,那就适合走技术道路。如果不是这样,这条路比较辛苦,还请三思。其实产业里相关的领域也大有可为,比如说写技术相关的趋势作者,鲜有优秀的。目前除了互联网周刊的陈琼同学,我还没看到给商业媒体写技术相关的写手有几个写的好的,甚至往往都有致命的本质错误。诸如此类的周边领域很多,都有不错的机会,不一一列举。 2 假如1你回答的是喜欢,那么 你需要学习很多东西。我认为不可缺少的东西包括: * 基础理论* 算法* C语言* C++或java,如果精通C,可以舍弃C++,学java* unix* 正则表达式* 任何一种脚本语言(目前推荐python) 依次讲解为什么这么说 * 基础理论和算法20年来,应用层面急速发展,令人眼花撩乱,而实际上,大幕之后的东西,从1972年C和unix诞生以来就没有过本质的变化。在操作系统,数据库理论,编译原理,信息管理系统理论之类,都是*相对*静止的。虽然其中有类似于微内核还是整体内核之类的理论之争,但是几乎不影响格局,大可以放心去学。学这些东西唯一的问题是理论枯燥,最好是结合实践,做一些应用,学一些理论,张弛有度,这样总能保证好奇心旺盛。 学这些东西的目的是为了真正的了解计算机。不真正了解一个东西,很难举一反三,很难作到融汇贯通。其实高校教的这些东西都极有价值,只不过是在缺乏实践的基础上填鸭,效果往往变成了应付考试。 * C语言我对C语言的认识如下: (1)是对计算机的最小抽象 (2) 是一种操作内存的语言。 基于这2个认识,C是必须要学好的。 写程序,就是......

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

C语言-time.h从头学(2007-02-19 16:17:00)

摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。  关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)  1.概念  在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法.  通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:  Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。  Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。  epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。  clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。  我们可以使用ANSI标准库中的time.h头文件。这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格。下面,我将说......

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

ACM代码库(2007-02-18 23:14:00)

摘要:STL非修改算法   由于STL算法都是通过迭代器间接处理容器,下面定义istream_iteratorInIt,ostream_itreatorOutIt,forward_iteratorFwdIt,bidirectional_iterator BidIt,random_iterator RanIt 非修改算法: 算法 用法 说明 adjacent_find FwdIt adjacent_find(FwdIt first,FwdIt last);FwdIt adjacent_find(FwdIt first,FwdIt last,Pred pr); 在[first,last)查找相同元素的首次出现或能使pr(elem,nextElem)为true的元素的位置 ,函数查找成功返回位置,失败返回last binary_search bool binary_search(FwdIt first,FwdIt last,const T& val);bool binary_search(FwdIt first,FwdIt last,const T& val,Pred pr); 在区间[first,last)中查找元素val,如果找到返回true,否则返回false,第二种形式pr用于设定查找准则 count size_t count(InIt first,InIt last,const T& val); 返回区间[first,last)上val出现的次数 count_if size_t count_if(InIt first,InIt last,Pred pr); 返回区间[first,last)上满足条件pr(elem)的元素个数 equal bool equal(InIt1 first,InIt1 last,InIt2 x);bool equal(InIt1 first,InIt1 last,InIt2 x,Pred pr); 判断[first,last)与x开始的区间的元素是否相等,pr用于指定判断函数 equal pair<FwdIt,FwdIt> equal_range(FwdIt f......

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

快速排序法(2007-02-18 22:43:00)

摘要://快速排序法 //基本的思想:通过一趟排序将待排的记录分割成独立的两部分,//其中前一部分的 记录的关键字均比另一部分记录的关键字小,//再分别对两组记录进行递归分割,达到排序的目的 //平均时间复杂度为  O(log2(n)) #include "iostream.h"#include "stdlib.h" //交换两变量值void swap(int &a,int &b){ int c; c=a;a=b;b=c;} //将数组分成两部分,前一部分的值均比后一部分值小//返回分界点int Partition(int data[],int low,int high){ int pivokey; pivokey=data[low]; while(low<high) {  while(low<high&&data[high]>=pivokey)   high--;  swap(data[low],data[high]);   while(low<high&&data[low]<=pivokey)   low++;  swap(data[low],data[high]); } return low;} //进行的递归的调用,达到排序的目的void QSort(int data[],int low,int high){ if(low<high) {  int pivokey=Partition(data,low,high);  QSort(data,low,pivokey-1);  QSort(data,pivokey+1,high); }} void main(){ int i; int mydata[50]; for(i=0;i<50;i++) {  //每行显示 10 个数据 &n......

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