c

意想不到的c++:程序结果的多输出

不修改 main 函数, me 们能多大程度去影响程序的输出结果呢?!或是说,如何才能在不修改 main 的情况下去修改程序的输出结果?面试中可能经常问到的一个问题:下面是输出 hello,world 的程序代码

Tags: 

gcc命令

GCC说明

GCC 最初是 GNU C Compiler 的缩写,也就是最初是 c 编译器,后来演变成了 GNU Compiler Collection 的缩写,也就是成了一个编译器的集合。GCC 可以编译 c 、c++、、objective-c、objective-c++、java、pascal、ada 等语言,不过很多时候 me 们关心的是如何编译 c 和 c++。linux 主要是用 c 写的,其上的各种实用工具(比如各种命令)一般也是 c 写成的;而 GCC 最初也是用 c 写的,后来改用了 c++。

通常用 gcc 命令来编译 c 文件,用 g++ 命令来编译 c++ 文件。不过也可以使用 gcc 来编译 c++ 文件(链接 libstdc++ 库而不是 glibc 库)。下面主要是通过 gcc 命令来说明编译,g++ 的基本是一样的。

编译过程

假设现在有一个 hello.c 文件:

Tags: 

猴子分桃

猴子分桃的故事大体有两种描述:

描述 1 :五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个?

描述 2 :海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

分析

程序猿一般这样看问题:总之桃子数目是整数,me 就从 1 开始试,然后分给猴子们,如果可以按题目要求的分法(去掉 1 个然后平均分 5 份,剩下 4 份)分 5 个猴子不就可以了 ? 真是不动脑筋的思考方案呀,尼玛 ! 不过这的确是一种万能的解决方案,对于本题来说,程序也不会运行很久。

现在从一个非程序猿的角度看问题。这里主要是要捕捉到它们的数量关系。

Tags: 

2013年腾讯实习生招聘笔试题目

更新前话

博客本写于今年的 4 月 13 号,腾讯笔试完的中午;记得那天中午饭都没有吃,O__O"… 本是实习生笔试,后来参加面试,自我赶脚还良好,不过最后没有进;后来去大众点评实习了两个月,转眼间就到校招的时间了。(喂,不要触景伤情了,重点丫,O__O"…) 现在又到了各种笔试、面试和被鄙视的时间了,鄙人实验室没有名气,项目经历也不多,只能期望笔试有个好成绩提高一点印象分。(蛤 ? ) 好吧,今天更新一些博客,重温一些东西。

最初第 5 题分析的特别的长,所以 me 将其移到评论中去了,其实看不看都无所谓,主要是为了看其他题目的方便。

废话少说

一山更比一山高,一海还比一海深。微软就够坑的了,全部多选,选错负分,少选还能得一半分;腾讯 60 分选择题(满分100分),不选、少选、多选均是 0 分,O__O"…。me 们这些半瓶子表示鸭梨很大,有木有!

Tags: 

并查集(union-find-set)

并查集

并查集,即为 union find set,实际上就是说对于集合 set,只有两个操作, 查找 find 和合并 union。它是一种典型的数据结构,用在一些典型的地方。比如说有一些人,他们之间有些人是朋友关系,假设“朋友的朋友也是自己朋友”,那么这些人就可以分成若干伙儿,现在给出一些朋友关系,让给出有多少伙,以及每一伙儿都有哪些人。类似的问题还有很多,比如:

Tags: 

2013年微软实习生面试

面经

5 月 9-10 号这两天是微软(在杭州)面试的日子,me 是 9 号(就是今天)下午 1:00 的。每个人 2-3 面,两面是必须的,每面一对一,都是 1 个小时,也就是 me 们是 1:00 开始一面,2:00 大家再开始二面,至于有没有三面,不同人情况不一样,me 没有三面。一对一面试,在一个(大)房间中,真宽敞,O__O"…;每一面 3 道数据结构/算法题目,貌似是必须的,一个小时内结束一面。

微软面试跟网易、腾讯、阿里云、淘宝、大众点评等等不同的是,人家几乎不关心 u 有神马项目经验,甚至不关心 u 基本语法、操作系统、网络知识学的肿么样,肿之就是 3 道数据结构/算法题目,写程序!!!当然也会说点其他东西,下面慢慢说吧。

Tags: 

剑指offer上的另外一些题目

基本都是数据结构和算法的小题目,可以帮助 me 们锻炼一下编程能力,实际上更多的是分析和解决(小)问题的能力,而编程只是把已有的想法用编程语言描述了一下而已。前面的一些题目也只是描述了大致的思路而已,有些题目程序 me 也还么有写,不能认为这是无关紧要的,“眼高手低”的事情,谁都遇到过,u and me !不过现在时间有限,先把题目罗列一下,然后描述下思路才是当务之急。

Tags: 

剑指offer上的一些题目

me 发现实验室真不是学习的地方,至少 me 在实验室几乎都上网了,O__O"…。昨天去图书馆借了本剑指 offer,看了一个小时,看到了一些题目,有的题目已经见过,他上面说的解题方法也已经知道了,有些么见到。题目要么是语言有关的,要么是数据结构有关的,要么是算法有关的,赶脚都很不错,所以,写下来,围观一下。对了,不要迷信答案,比如前不久微软面试题上面有个 char *p="hello", *q="hello"; 问,p == q 吗?实际上,这是 undefined behavior !but,剑指 offer 上是说 p 和 q 相等,也就是 "hello" 只保存一份!再次说明,不一定!是一份还是两份,至少语言层面没有限定,某个编译器可以只当一份保存,另外一个编译器也可以保存两份!(如果说介对 me 们有神马启发的话,me 赶脚是多看点东西还是比较好点,一家之言难免有错,me 亦如此。)

Tags: 

链表

“今日事,今日毕。”貌似小学就听说了这句名言,本身也挺有道理,然而去做的话,却不是那么容易的事。很久之前,有多久呢?腾讯笔试貌似是上个月 13 号一个周六的事,me 记得,前一天,me 就要写一篇 blog 记录一下链表的程序,然而错过了,介个一错就是大半个月(现在都五月三号勒!)。

问题起因于一个问题:肿么判断两个链表 A 和 B,有没有交点;如果有的话,找到交点位置。

分析

如果说两个链表 A 和 B 有交点 inode 的话,那么,inode 后面的结点便是 A 和 B 共有的结点,而 inode 是最初的一个。所以呢,只需要判断 A 中是不是有一个结点在 B 链表中就可以判断了。如果要找交点位置的话,只需要找到 A 中结点在链表 B 中的第一个结点就可以。如果我们顺序滴遍历 A 中的每个结点,然后搜寻是否在 B 中,就可以一下子完成这两个任务。

Tags: 

快速排序和寻找中位数

介个,肿么说,第一句话要肿么说才好,O__O"…。腾讯实习生笔试中有一道题目,问求 n 个数的最大值和最小值,需要的最少比较次数是多少?问题绝不是简单滴 2n-2 或是 n-1 就算彻底解决了。me 怀疑它的答案可能是 3n/2。为嘛,这里不多说。(因为这本是个引子而已,并不是现在要讨论的东西。)现在 me 们关心的问题是,求 n 个数中的中位数,肿么求?有神马比较好的求法嚒?

Tags: 

Pages