php汉诺塔
Ⅰ 想学编程不知道从哪里开始
1、先要确定自己学编程是要干什么?
2、再来找相对应的编程语言。
科普一下
编程语言:C、C++、java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C
shell、Objective-C、php、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D,golang,Rust
涉及到的工具:sed、awk、grep
我们现在学一门语言,大部分是要用到了才学(基本上是中国的公司用什么我们学什么),基于兴趣的不多。
解决问题case:已知大量事实,和事实之间的约束,要求挖掘关系。
应用程序case:从小到超大型应用程序,非完全互联网应用
解决问题case:程序规模不是很大的偏数学问题
特殊应用case:需要大量处理字符串的应用
特殊应用case:需要一个胶水,粘结不同语言写出来的程序
果断用prolog族语言。
例如,汉诺塔、地图着色、数独问题、八皇后问题等这种考验智商,并且需要从已知规则中发现模式的问题。拥有一大堆已知案例的应用(例如大部分的人工智能情况)
除非你是研究者,程序员一般是遇不到这种问题的。当然顶级的程序员也确实得具备解决这些问题的能力。但是他们就算解决也是用c解决的。这属于叫好不叫座的科研型语言。
这也是大部分软件公司遇到的情况。一般有几种没办法分出高下的解决方案:C++,Java,C#,VB。当然,这里面可以有CLR和JVM的不同衍生。例如,理论上,你也可以用scala来代替(不过估计大型公司不会冒这个险)。还是在理论上,你也可以用函数式编程的Clojure和Haskell来做(估计没人会那么傻)。还是在理论上,也可以用Ada这种强悍的通用语言,但估计没人愿意接受比C++还复杂的编程语言。理论上(基本只能在理论上),不嫌弃的话smalltalk也行。还是在理论上,python、ruby等配合一定的图形界面库也可以胜任(但项目大到一定的程度是,你会欲哭无泪)。
但是,我另起一行。有个语言:D语言。我个人不认为不可以列入首选名单。但是貌似知名度不行啊。。。。企业支持少啊。。。。。确实是门优秀的语言。C++太尾大不掉,需要一种语言,让C++成为纯粹的C++。
最近谷歌强势的推出了golang,背景是后台程序员C++写的好的太缺,python写的后台实在是效率不行。于是一个在这之间的,注重工程管理的,并且是全静态编译的golang诞生了,你会发现其拥有C++匹配的效率,也拥有python般丰富的编程库。其go和channel机制着实让人着迷,一出来就吸引了大量的后台开发人员,有的公司甚至后台全面转向go。但是其之前版本的内存回收机制比较烂,所以也有无数坑。现在的golang已经基本解决了这些问题,编译器也用golang重新实现了。可以说已经产品化了。
与golang竞争抢这个市场的还有rust,这是一个为并行而生,意在取代c++的编程语言。与golang的定位是相同的,但是目的是不同的。rust复杂,很复杂,上手难,但是一旦你掌握,这将是一个很强大的武器。已经有公司放弃golang转向rust的。但是这个语言的致命缺陷就是复杂,我们已经有一个复杂的C++了,他啥都能干,还要一个rust做什么?当然,我不能把rust拍死,毕竟这门语言的牛逼程度时比较逼近C++的。不过我高度怀疑其会较好不叫座。
稍小一点规模的,无法接受面向对象的程序员,有不少用C的。虽然OOP程序员看他们像是不开化的人,但是他们有他们的哲学(我从嵌入式开发过来,相当长时间内也摆脱不了C,总本能的排斥OOP),但是如果读者是一个nginx或者其他的c底层基础设施绝对会对oop嗤之以鼻,内核的编程范式已经给c下了一个什么叫对什么叫错的定义了。由于内核作为标杆,大家竟然同步的统一了编程风格。不用商量。nginx给那些歧视c的人上了生动的一课,现在哪一个互联网公司能离开nginx?
曾经很多人用Pascal(包括扩展的Delphi),曾经很多人用Fortran,但是都明显在退步。大型通用语言(C++、Java、C#)表明了他们在各种环境的适应能力。lisp系列也在一些问题上展现出古老的魅力。(但这个语言远没有《黑客与画家》的作者给我们描述的那样神奇,个人认为。不过我的C++风格思想占了主导,可能没办法公正的评价lisp,但是据我的使用lisp经验,在大部分情况下,我最后还是放弃了它。因为大部分情况下我总能找到用C++(或其他OOP语言)更好的原因)
另外,读研的一般都用过matlab。这个工具,两个字:强大!不过仅指科学计算方面。脱离了这个方面,就得考虑合不合适了,毕竟固定的矩阵思维不是啥情况都有效的。我用matlab最多的是神经网络,图片和信号处理。毫不夸张的说,matlab活脱脱一个photoshop啊。。。(当然,你得会用。。。)不过matlab的神经网络确实不行,做的太差了,小规模的网络可以,3层不用BP的F网,几十个就挂掉了。有这个需求的用ANN吧。(还是C++,偷笑)
首选利器是Perl,不过如果你习惯了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸收三家所长做的。
其次是C++,别拍我。诸位用过regex吗?就是boost里的那个,最近被并入C++11啦。有了正则表达式的C++,处理字符,无敌了很多哇。当然,Java程序员别拍我,我知道这种库一个大型的通用语言都会有。我提C++,一般顺带着不否定Java和C#能以相似的代价完成相同的功能。
首选是python。俩字:精简(呀,这么说一个强大的语言有点太轻浮了,但比起ruby,确实简单呐。。。)(另外Boo在.net是可以用来取代python)
Ⅱ 什么叫汉诺塔问题
汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请自己运行计算,程序见尾部。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。
后来,这个传说就演变为汉诺塔游戏:
1.有三根杆子A,B,C。A杆上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移到C杆上
经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,汉诺塔问题也是程序设计中的经典递归问题。
Ⅲ 运维工程师笔试题
网易网络运维工程师笔试题目
类型:Windows开发 | 试题:55道试题
Question 1. (单选)
或者当你的孩子变坏时你严厉地惩罚他,或者他长大后将成为罪犯。你的孩子已经学坏了,因此,你必须严厉地惩罚他。 除了哪项,以下诸项都能构成对上述论证的一个疑难?
1. 什么是你所说的“学坏”的确切含义?
2. 你的第一个前提是否过于简单化了?
3. 你的第二个前提的断定有什么事实根据?
4. 你的孩子是怎么学坏的?
Question 2. (单选)
针对作弊屡禁不止的现象,某学院某班承诺,只要全班同学都在承诺书上签字,那么,假如全班有一人作弊,全班同学的考试成绩都以不及格计。校方接受并实施了该班的这一承诺。结果班上还是有人作弊,但班长的考试成绩是优秀。 以下哪项是从上述断定逻辑地得出的结论?
1. 全班有人没在承诺书上签字
2. 全班没有人在承诺书上签字
3. 全班多数人没有作弊
4. 作弊的就是班长本人
Question 3. (单选)
甲城卖出的报纸比乙城多。因此、甲城的居民比乙城的居民更了解天下大事。 以下各句假如为真,都能削弱上述结论,除了:
1. 甲城发行仅限于本地新闻报道的周报
2. 甲城报摊出售的报纸的平均价格低于乙城
3. 甲城人口比乙城多
4. 乙城的很多居民在甲城工作,所以就在甲城购买报纸
Question 4. (单选)
雄性园丁鸟构筑装饰精美的巢。同一种类的不同园丁乌群建筑的巢具有不同的建筑和装饰风格。根据这一事实,研究人员认为园丁鸟的建筑风格是一种后天习得的,而不是先天遗传的特性。” 以下哪项假如为真,则最有助于加强研究者的结论?
1. 通过对园丁鸟的广泛研究发现,它们的筑巢风格中的共性多于差异
2. 年轻的雄性园丁鸟在开始筑巢时是很笨拙的,很显然是花了许多年来观察年长者的巢才成为行家能手的
3. 园丁鸟只在新几内亚和澳州被发现,很显然,两地之间的园丁鸟没什么联系
4. 众所周知,一些会唱歌的鸟的演唱语调是后天习得的,而不是先天遗传的
Question 5. (单选)
在过去的20年中,美国黑人议员的数量增加了将近100%,而白人议员的数量则略有下降,这说明,在美国的权力机构中,黑人很快就可和白人拥有相等的政治权力。
以下哪项假如是真的,最有力地削弱了上述论证?
1. 20年来,美国议员的总额保持基本不变。
2. 20年前,白人议员的数量是黑人议员数量的近8倍。
3. 20年来,黑人中的议员竞选者增加了将近200%,而白人中议员竞选者的数量则基本不变。
4. 20年来,黑人参加政治竞选。仍然受到各种非凡的限制。
Question 6. (单选)
人们一直认为治理者的决策都是逐步推理,而不是凭直觉。但是最近一项研究表明,高层治理者比中、基层治理者更多地使用直觉决策,这就证实了直觉其实比精心的、有条理的推理更有效。
以上结论是建立在以下哪项假设基础之上的?
1. 有条理的、逐步的推理对于许多日常治理决策是不适用的
2. 高层治理者制定决策时,有能力凭直觉决策或者有条理、逐步分析推理决策
3. 高层治理者的决策比中、基层治理者的决策更有效
4. 高层治理者在多数情况下采用直觉决策
Question 7. (单选)
当被催眠者被告知自己是聋子后,再问他们能否听见催眠者说话时,他们回答“听不到”。一些学者试图解释这一现象,认为被催眠者的“自我”被分裂为各个零散的部分,聋了的那一部分和回答的那一部分是相互分裂的。
以下哪项质疑最能削弱以上解释?
1. 为什么回答的那一部分不答“能听到”呢?
2. 为什么观察到的事实都必须有个特定的解释呢?
3. 为什么所有被催眠者在上述情况下都做出同样的反应呢?
4. 为什么所有被催眠者的自我的分裂部分都是一样的呢?
Question 8. (单选)
去年电话机的销售额大幅度上升。为了利用这一形势,某电话公司预备扩大本公司型号的电话机生产量,同时继续从事已经家喻户晓的广告宣传工作。
以下哪项假如为真,则最有可能使得该公司采用以上计划时不能增加销售额?
1. 虽然去年生产的产品全部售出,但该公司的市场占有率是下降的。
2. 该公司预备发运给零售商的电话机的库存数去年有稍微下降。
3. 该公司的电话机是去年销售额增加的三种品牌之一。
4. 尽管零售价格有所上升,该公司的销售额去年是下降的。
Question 9. (单选)
有人向某市政府提议应该在所有新建的房屋内安装一种起火时会自动激发的洒水器。但是一位房地产开发商认为,既然90%的房屋着火都是被家庭成员扑灭的,所以安装室内自动洒水器对灭火意义不大。
以下哪项假如为真,则最能削弱房地产开发商的观点?
1. 大多数人都没有经过灭火技能的正规练习。
2. 住宅着火导致的大部分财产损失是因为起火时家人都不在场。
3. 在住宅内安装烟雾探测器比安装洒水器要便宜得多。
4. 该市消防队奔赴火场的时间要比全国平均时间短。
Question 10. (单选)
以下哪项最适合接在下段文字后面?
人们在购买一种名牌产品时,实际上是花钱买身份。他们希望通过购买名牌产品拉大旗作虎皮,抬高自己。所以,名牌产品的销售不应采用薄利多销的策略,因为:
1. 如今出手阔绰的购买者越来越少。
2. 保持销售额*的是保持名牌产品“独一无二”的魅力。
3. 名牌产品的购买者对产品的质量和价格同样关心。
4. 扩大市场范围有助于提高盈利。
Question 11. (单选)
为什么不将N e t B I O S用于因特网互连
1. 它是不可路由的
2. 它是不安全
3. 它是不可*的
4. a和b
Question 12. (单选)
计算机网络分为局域网、城域网与广域网,其划分的依据是:
1. 数据传输所使用的介质
2. 网络的作用范围
3. 网络的控制方式
4. 网络的拓扑结构
Question 13. (单选)
用于保存计算机输入输出数据的材料及其制品称为
1. 输入输出媒体
2. 输入输出通道
3. 输入输出接口
4. 输入输出端口
Question 14. (单选)
某二*树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。该二*树结点的前序序列为
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 15. (单选)
某二*树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。该二*树对应的树林结点的层次次序序列为
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 16. (单选)
在虚拟页式存储治理方案中,下面哪一部分完成将页面调入内存的工作?
1. 缺页中断处理
2. 页面淘汰过程
3. 工作集模型应用
4. 紧缩技术利用
Question 17. (单选)
对于下列文件的物理结构,哪一个只能采用顺序存取方式?
1. 顺序文件
2. 链接文件
3. 索引文件
4. Hash文件
Question 18. (单选)
对一个排好序的线性表,用二分法检索表中的元素,被检索的表应当采用哪种存储表示?
1. 顺序存储
2. 链接存储
3. 散列法存储
4. 存储表示不受限制
Question 19. (单选)
以下哪一个不是栈的基本运算
1. 删除栈顶元素
2. 删除栈底元素
3. 判定栈是否为空
4. 将栈置为空栈
Question 20. (单选)
设二*树根结点的层次为0,一棵深度(高度)为k的满二*树和同样深度的完全二*树各有f个结点和c个结点,下列关系式不正确的是:
1. f>=c
2. c>f
3. f=2k 1-1
4. C>2k-1
Question 21. (多选)
Windows socket编程中经常需要进行字节序列的转换,下列哪几个函数是将网络字节序列转换为主机字节序列
1. htons
2. ntohs
3. htonl
4. ntohl
5. WSAntohs
Question 22. (单选)
下面哪个协议运行在网络层
1. HTTP
2. SMTP
3. UDP
4. IP
Question 23. (多选)
DNS用于完成地址查找,是经常使用的网络服务,从OSI网络模型来看,下面哪些服务与其不在同一层上
1. HTTPS
2. TCP
3. SMTP
4. PING
5. TELNET
Question 24. (单选)
SMTP的主要功能是什么
1. 提供有关网络设备的治理信息
2. 在路由器接口层监控安全边界
3. 在主机间传输邮件
4. 提供端口利用信息
Question 25. (单选)
Internet网络层使用的四个重要协议是
1. IP、ICMP、ARP、UDP
2. IP、ICMP、ARP、RARP
3. TCP、UDP、ARP、RARP
Question 26. (多选)
以下关于动态规划法的描述哪些是正确的
1. 将问题分解成多级或许多子问题,然后顺序求解子问题。
2. 可以确保得到最佳解
3. 前一个子问题的解为后一个子问题的求解提供有用的信息。
4. 从问题某一初始或推测值出发,一步步的攀登给定目标。
5. 尽可能快的去逼近更好的解,当达到某一步不能继续时终止。
Question 27. (多选)
算法的特征包括
1. 有穷性
2. 确定性
3. 输入和输出
4. 能行性或可行性
Question 28. (单选)
汉诺塔(Hanoi)问题中令h(n)为从A移动n个金片到C上所用的次数,则递归方程为
1. h(n)=2hn-1
2. h(n) = 2h(n-1) 1
3. h(n)=2^n-n*h-1
4. h(n)=2h*n-1
Question 29. (单选)
启发式搜索一般是何种算法的改进
1. 深度优先搜索
2. 广度优先搜索
3. 动态规划
4. 贪婪法
Question 30. (单选)
假设一棵二*树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,则其前序遍历序列为 ( ) 。
1. ABCDEFGHIJ
2. ABDEGHJCFI
3. ABDEGHJFIC
4. ABDEGJHCFI
Question 31. (单选)
完全二*树共有700结点,该二*树有多少个叶子结点:
1. 349
2. 350
3. 351
4. 352 5. 353
Question 32. (单选)
在下列排序方法中,空间复杂性为O(log2n)的方法为( )。
1. 直接选择排序
2. 归并排序
3. 堆排序
4. 快速排序
5. 冒泡排序 Question 33. (单选)
有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?(????)
1. 5 4 3 6 1 2 2. 4 5 3 1 2 6
3. 4 3 5 2 1 6 4. 2 3 4 1 5 6
5. 3 4 6 5 2 1
Question 34. (单选)
散列函数有一个共同性质,即函数值应按()取其值域的每一个值;
1. 最大概率
2. 最小概率
3. 同等概率
4. 平均概率
Question 35. (单选)
下面描述中正确的为:
1. 线性表的逻辑顺序与物理顺序总是一致的。
2. 线性表的顺序存储表示优于链式存储表示。
3. 线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。
4. 二维数组是其数组元素为线性表的线性表。
Question 36. (单选)
什么情况下必须要并行开发(多分支开发):
1. 同时开发多种功能
2. 同时开发多个版本
3. 多人同时开发
4. 多地域分布式开发
Question 37. (单选)
软件测试类型按开发阶段划分是:
1. 需求测试、单元测试、集成测试、验证测试
2. 单元测试、集成测试、确认测试、系统测试、验收测试
3. 单元测试、集成测试、验证测试、确认测试、验收测试
4. 调试、单元测试、集成测试、用户测试
Question 38. (单选)
可作为软件测试结束标志的是:
1. 使用了特定的测试用例
2. 错误强度曲线下降到预定的水平
3. 查出了预定数目的错误
4. 按照测试计划中所规定的时间进行了测试
Question 39. (多选)
测试设计员的职责有
1. 制定测试计划
2. 设计测试用例
3. 设计测试过程、脚本
4. 评估测试活动
Question 40. (多选)
以下对桩(stub)函数的描述正确的是:
1. 在单元测试中调用其它模块
2. 在单元测试中被其它模块调用
3. 在自顶向下的集成过程中尤其有效
4. 在自底向上的集成过程中尤其有效
Question 41. (多选)
在一台2.4.x 内核的linux机器上,下列命令用于检查ipv4的tcp端口监听情况,哪个是对的?
1. netstat -ant|grep LISTEN
2. netstat -an |grep LIST
3. netstat -at | grep LISTEN
4. netstat -a |grep tcp|grep -i listen
5. netstat -a |grep tcp |grep -i li
Question 42. (多选)
在RH Linux观察系统负载状况的常用命令有:
1. top
2. vmstat
3. iostat
4. netstat
Question 43. (单选)
一块硬盘最多可以有()个主分区?
1. 1
2. 2
3. 3
4. 4
5. 5 Question 44. (单选)
php是一门:
1. 编译语言 2. 解释语言 3. 脚本语言
Question 45. (单选)
某应用通过 TCP 协议从客户端连接服务器端,但是总连接不上,那么netstat 输出的对应此应用的行的状态最有可能的是:
1. LISTEN 2. ESTABLISHED
3. TIME_WAIT 4. SYN_SEND
5. CLOSE_WAIT
Question 46. (单选)
进行DeviceIoControl时,假如驱动程序看到的输入缓冲区的地址为0x500000,输出缓冲区地址为0x600000,则此次DeviceIoControl的缓冲区传输机制为
1. METHOD_BUFFERED
2. METHOD_IN_DIRECT
3. METHOD_OUT_DIRECT
4. METHOD_NEITHER
Question 47. (单选)
IDispatch接口主要在什么地方使用?
1. 用于支持OLE自动化,延时绑定对象的属性和方法.
2. 用于支持Windows SDK开发
3. 方便在IE和脚本语言里使用COM对象
4. 用于支持链接点
Question 48. (多选)
下面4句对Windows API TerminateProcess函数的描述,请问其中有几句是对的
1. 任何线程都可以调用此函数来终止自己或另一个进程的运行
2. 只要调用过了此函数,则指定要退出的进程已经退出。
3. 只有当无法使用另一种方法来迫使进程退出时,才考虑使用此函数。
4. 用此函数退出进程,进程没有机会将自己的数据存入硬盘,也无法释放占用的内存。
Question 49. (单选)
大量API中都需要一个SECURITY_ATTRIBUTES参数,多数情况下都传NULL,请问NULL是什么意思?如:HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, … … );
1. 用最低安全权限创建对象
2. 用最高安全权限创建对象
3. 用注册表中设定的缺省安全权限创建对象
4. 用创建对象的用户的缺省安全属性创建对象
Question 50. (单选)
调用CoCreateinstance函数创建COM对象时,函数内部首先要获得以下哪个接口,才能实现COM对象的创建
1. IUnknown
2. IClassFactory
3. IDispatch
4. 以上三个都需要
Question 51. (单选)
Window98内核使用的字符集是
1. ANSI
2. UNICODE
3. ANSI和UNICODE
4. 以上都不对
Question 52. (单选)
使用Windows API 函数CreateFile可以打开的对象,下列哪项说法最准确?
1. 文件和目录
2. 通信设备
3. 磁盘设备
4. 以上都可以打开
Question 53. (多选)
关于以下的代码,哪些说法是错的? HWND hWnd = CreateWindow("#32770", pszName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, _hInstance, NULL); ShowWindow(hWnd, SW_HIDE);
1. 假如pszName 是NULL,则CreateWindow返回NULL
2. 假如 _hInstance参数是NULL,则CreateWindow一定返回NULL
3. 假如不调用ShowWindow并传递SW_HIDE,则该窗口将显示在屏幕上
4. 在2000/XP下调用CreateWindow函数一定失败,必须调用CreateWindowEx函数
Question 54. (单选)
当一个进程结束运行之后,下列说法正确的是
1. 所有资源都会被释放
2. 未释放的系统GDI资源不会被释放
3. 多进程共享数据不会被释放,如:内存映射文件.
4. 在堆中分配的内存不会释放.
Question 55. (单选)
在Windows中,下列关于堆和栈的说法中错误的是
1. 堆都是动态分配的,没有静态分配的堆;栈有静态分配和动态分配2种分配方式。
2. 堆的生长方向是向下的,即向着内存地址减小的方向增长;栈的生长方向是向上的,即向着内存地址增加的方向增长。
3. 对堆的频繁new/delete会造成内存空间的不连续,从而造成大量的碎片;栈则不会存在这个问题
4. 栈是由编译器自动治理;堆的释放工作由程序员控制,轻易产生内存泄露。
这是第一轮的考试题。
Ⅳ 我想学习编程,但是不知道该怎么开始。
我建议最好是从基础入手,而不是一开始就进行可视化编程。虽然如今国内绝大多数pc都是使用的windows,但是毕竟这知识这个世界的冰山一角。扎实的基础自然会更有用处。编程其实重要的是程序思维,然后是算法和数据结构。这些都是超出语言的,就是说不管是学c学java学delphi还是别的什么,这一部分都是一致的。因此培养这部分的知识可以说是一本万利的事情。初学肯定是通过语言熟悉思想熟悉算法和数据结构,到一定的时候就是纯粹的思想和算法数据结构的学习,便已经脱离程序语言了。经历过这些阶段,换一种语言不过是重新了解一下描述的方式,就像你了解了中文思维,山东话和四川话的差别就不会太大;了解了拉丁语的思维,整个语系的语言都不过是简简单单的记忆工作,应用就好。入门的语言,理论上是怎么方便学哪个,看那个顺眼学哪个。当然这里面还是有不同的推荐的。一般来说我比较推荐pascal、c/c++、java。并不是因为这三个东西很通用很有前途,而是它们实在是严整而有规则(c/c++还显得稍微的宽松了一点),而严谨的语法要求和明确的概念区分是有利于编程思维的形成和算法数据结构的学习的。同样的因为这个理由我不推荐vb,而并不是因为它功能不强大(事实上vb在windows环境中是相当牛的语言)另外一个建议是,如果学c,不要一开始就用vc。ms提供的很多东西很方便,有很多很简单的实现方法,但是它们不标准。vc与ansi
c标准是有很大的差距的。首先一个不遵循标准的c/c++程序是不通用的,换个编译器说不定就不被承认了。所以我非常推崇gcc,理由之一是它完全符合
ansi
c标准,无论它的c还是c++编译器都很严整,功能上一点也不缺乏(有人说gcc不能做图形界面的程序,这一点完全错误,到处都有的qt库和gtk库都能做出很好的界面),另外一个理由便是它免费,毕竟稍微大一点的软件企业就不会屈从与微软的编译器和平台,而一个免费的c编译器无疑可以创造更多的利益;就算要转vc,标准的c程序也是几乎不要作任何改动的。当然,这一切的前提是,你真的很想很好的学编程,做一个这方面的精英。如果只不过是兴趣,或者只是想拿一个ms的工程师认证然后在国内企业找份诸如设计vf、vb程序之类的工作,那完全可以忽略我上面的话,去找个认证培训班,认认真真听听课,好好完成练习,从vb或者vc入手,考好认证是很不会太难的。毕竟现在很多很好的大学里都从来不缺乏计算机的课程,不会缺少算法或者编译原理的课程,不会没有计算机科学的研究院,而那里面出来的人一般都具备了很好的基础知识,会更加容易成为前面所说的精英。
Ⅳ 谁帮我解释一下河内塔程序
汉诺塔问题是程序设计中的经典递归问题。 算法思路: 1.如果只有一个金片,则把该金片从源移动到目标棒,结束。 2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒 补充:汉诺塔的算法实现(c++) #include <fstream> #include <iostream> using namespace std; ofstream fout("out.txt"); void Move(int n,char x,char y) { fout<<"把"<<n<<"号从"<<x<<"挪动到"<<y<<endl; } void Hannoi(int n,char a,char b,char c) { if(n==1) Move(1,a,c); else { Hannoi(n-1,a,c,b); Move(n,a,c); Hannoi(n-1,b,a,c); } } int main() { fout<<"以下是7层汉诺塔的解法:"<<endl; Hannoi(7,'a','b','c'); fout.close(); cout<<"输出完毕!"<<endl; return 0; } C语言精简算法 /* Copyrighter by SS7E */ #include<stdio.h> /* Copyrighter by SS7E */ void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */ { if(n==1) { printf("Move disk %d from %c to %c\n",n,A,C); } else { hanoi(n-1,A,C,B); /* Copyrighter by SS7E */ printf("Move disk %d from %c to %c\n",n,A,C); hanoi(n-1,B,A,C); /* Copyrighter by SS7E */ } } main() /* Copyrighter by SS7E */ { int n; printf("请输入数字n以解决n阶汉诺塔问题:\n"); scanf("%d",&n); hanoi(n,'A','B','C'); }/* Copyrighter by SS7E */ PHP算法: <?php function hanoi($n,$x,$y,$z){ if($n==1){ move($x,1,$z); }else{ hanoi($n-1,$x,$z,$y); move($x,$n,$z); hanoi($n-1,$y,$x,$z); } } function move($x,$n,$z){ echo 'move disk '.$n.' from '.$x.' to '.$z.'<br>'; } hanoi(10,'x','y','z'); ?> JAVA算法: public class Haniojava { public static void main(String args[]) { byte n=2; char a='A',b='B',c='C'; hanio(n,a,b,c); } public static void hanio(byte n,char a,char b,char c) { if(n==1) System.out.println("move "+a+" to "+b); else { hanio((byte)(n-1),a,c,b); System.out.println("move "+a+" to "+b); hanio((byte)(n-1),c,b,a); } } }
Ⅵ php去掉最高分和最低分怎么算平均分
$input = array ("2", "1", "5", "7", "3", "6", "4");
sort($input);//从低到高排序
$a = array_splice ($input, 1, -1);//去掉头和尾,也就是最大和最小值
print_r($a);
输出 Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 )
这样就去掉了最低和最高
foreach($a as $v){$c+= $v;} //$c就是去掉值最低和最高后的和
$num = count($a);//$num就是去掉值后的元素个数
$value = $c/$num;//$value就是你想要的平均值了
方法还有很多,自己试试吧
Ⅶ 在学习PHP的过程中,什么时候才可以学数据结
关于这个问题一定不要瞎跟风,一定不要超前,也就是说不要看到网上别人说这个重要就马上去学,也不要看到别人说它很抽象,很难,就不去学。总的来说,这个玩意是要学,而且必须学,关键是什么时候学?怎么学?
如果没有学好该语言的基础,就不要学数据结构和算法,否则你学了许久,不但华而不实,派不上用武之地,还极大的打击你学习兴趣。
比如举个例子:学PHP2年多的人,你在公司开发项目中,用的是比如PHPCMS,你什么时候用过大学教材上教的数据结构中图的算法?或者哈夫曼算法?但是你却可以胜任公司的许多用PHPCMS开发的项目,工资可能还不低。
反过来,你哪怕背熟了汉诺塔这些复杂的算法,但是你没时间学PHP以及PHPCMS,你去应聘PHP开发职位,你觉得会有几个给发面试通知?你的简历上就只能写“精通数据结构和算法”,但是拍不上实战用途上,结局也很可能挺尴尬的。
别人学文科的连数据结构是什么都不知道,照样能找工作,别人就不找需要数据结构的工作嘛。这就说明了:找工作甚至是PHP之类的开发应用领域的工作是和需求直接挂钩的,工作中用到了什么才会需要该方面的人才。
所以,学不学数据结构,要看你以后想找的工作岗位需要不需要。如果你是想找个PHP快速开发项目的工作岗位,1年后岗位上需要的框架你用的很熟练,你是很可能当技术经理的。但你可能并没有用到数据结构中那些复杂的算法。