随笔分类 -  面试题

nuaa acm 1138
摘要:http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1138分析:这是一个求解发生概率的问题。为了问题描述的方面,假设x表示猴子到来的时间为x,猴子摘香蕉的时间为a,小女孩到来的时间为y,小女孩采蘑菇的时间为b。能够得到以下式子:可以看出这是一个线性规划的问题,得到如下图示:也就是求如上图中,阴影部分在60*60的面积中所占的比率值。示例代码如下: 1 #include <iostream> 2 #include <iomanip> 3 using namespace 阅读全文
posted @ 2012-04-13 13:37 笔记吧... 可能只有自己看得懂 阅读(247) 评论(0) 推荐(0)
算法导论 练习题 2.3-7
摘要:[淘宝笔试题,哪年出的题不记得了]请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素?1、先对数组排序,然后利用折半查找实现。 1 #include <iostream> 2 using namespace std; 3 4 void sort(int a[],int size) 5 { 6 // 直接插入排序 7 int key =0; 8 for(int i=1;i<size;++i) 9 {10 key = a[i];11 int j;... 阅读全文
posted @ 2012-04-12 11:08 笔记吧... 可能只有自己看得懂 阅读(305) 评论(0) 推荐(0)
网易面试题:写一段程序,实现atoi(const char* s)方法
摘要:描述: 写一段程序,实现atoi(const char* s)方法。示例代码: 1 #include <iostream> 2 using namespace std; 3 // 写一段程序,实现atoi(const char* s)方法。 4 // atoi用于将字符串转换成为整数。 5 // 比如 “123” => 123, “-246” => -246。 6 7 int Aatoi(const char *s) 8 { 9 // 主要的问题是负号的处理,不考虑其他字符的处理10 int len = strlen(s);11 if(0 == len) r... 阅读全文
posted @ 2012-04-11 18:58 笔记吧... 可能只有自己看得懂 阅读(318) 评论(0) 推荐(0)
百度面试题:找出第k大的数字所在的位置
摘要:描述: 写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。示例代码:[利用大顶堆排序,找到数组中第K大的数] 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 // 描述: 5 // 写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。 6 // 第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。 7 阅读全文
posted @ 2012-04-11 18:29 笔记吧... 可能只有自己看得懂 阅读(1185) 评论(0) 推荐(0)
归并排序与堆排序
摘要:1 #include <iostream> 2 using namespace std; 3 4 // 归并排序 5 void Merge(int a[],int b[],int i,int m,int n) 6 { 7 int j,k; 8 for(j = m+1,k=i;i<=m&&j<=n;k++) 9 {10 if(a[i] < a[j]) 11 b[k] = a[i++];12 else 13 b[k] = a[j++];14 }15 16 if(i<=m) ... 阅读全文
posted @ 2012-04-10 11:21 笔记吧... 可能只有自己看得懂 阅读(217) 评论(0) 推荐(0)
微软面试题:找到两个单向链表的第一个公共节点
摘要:问题描述: 两个单向链表,可能存在公共节点。如何判断是否存在公共节点,并找出它们的第一个公共结点。分析: 要注意到,单向链表右公共节点,实际上两个链表会组成一个Y型的结构,而不是交叉。第一种: 循环比较...O(n^2)第二种:O(n) 可以看到,两个链表的后半部分是相同的,不妨设链表为L1和L2,L1为10个节点,L2为7个节点。假设L1和L2相交,那么L1和L2的后半部分应该是相同的,现在的问题是怎么找到开始的交点? 首先,把链表剪切到一样长(依据短的链表剪切...)(这一步很重要,为什么需要剪切,原因暂时还无法证明...) 然后,比较两个链表的后继指针,如果相同则说明有交点..... 阅读全文
posted @ 2012-04-09 17:05 笔记吧... 可能只有自己看得懂 阅读(1649) 评论(0) 推荐(0)
微软面试题:将一个句子按单词反序
摘要:描述:微软面试题:将一个句子按单词反序将一个句子按单词反序。比如 “hi baidu com mianshiti”,反序后变为 “mianshiti com baidu hi”。分析:一般的想法,把所有的字符反转,然后把单个的单词再次反转。。。提供两种代码:纯c和stl版View Code 1 #include <iostream> 2 using namespace std; 3 4 char * Reverse(char *p) 5 { 6 int len =strlen(p); 7 if(len == 0) 8 { 9 cout << "字符... 阅读全文
posted @ 2012-04-09 16:44 笔记吧... 可能只有自己看得懂 阅读(1164) 评论(0) 推荐(0)
微软面试题:编程实现两个正整数的除法,不能用除法操作符
摘要:编程实现两个正整数的除法,当然不能用除法操作符。// return x/y.int div(const int x, const int y) {....}示例代码:View Code 1 #include <iostream> 2 using namespace std; 3 4 int div1(int x,int y) 5 { 6 if(0 == y) return -1; 7 8 int i = 0; 9 if(x < y) return i;10 int temp = y;11 while(x >= temp)12 {13 ... 阅读全文
posted @ 2012-04-09 15:31 笔记吧... 可能只有自己看得懂 阅读(446) 评论(0) 推荐(0)
求最大连续子序列和
摘要:题目描述: 数组 int a[] = {-4 , 3 ,56 , -15 , 34 , 0 , -14 , 4} ; 某几个连续的子序列其和最大,比如a0+a1 = -1 。a1+a2+a3+a4 = 78 。则[a1 a2 a3 a4]组成的数组即是所求。分析: 如果能够找到每个位置结束的最大连续子串和,那么保留最大的和就能解决问题。当然,也可以找到每个位置开始的最大连续子串和,其实这种的话就是把数组反转(其实还是求得以结束位置的最大连续子串和的意思),还是求解原来的问题。 重点:能够想到设计一个以第j处结束的子序列的最大和数组b[j]。(这样就能保证连续性,妙...)找出递推式: ... 阅读全文
posted @ 2012-04-09 11:57 笔记吧... 可能只有自己看得懂 阅读(2333) 评论(0) 推荐(1)
1024! 末尾有多少个0
摘要:这个问题关键就是算出整个算术式中5因子的个数。View Code 1 #include <iostream> 2 using namespace std; 3 4 void main() 5 { 6 int count =0; 7 int N =1024; 8 int c = 5; 9 while(c < 1024)10 {11 count += N/c;12 c = c*5;13 }14 cout << count << endl;15 }分析一下: 是5的倍数的数有: 1024 / 5 = 204... 阅读全文
posted @ 2012-04-05 11:48 笔记吧... 可能只有自己看得懂 阅读(2240) 评论(1) 推荐(1)
兄弟分钱、海盗分赃
摘要:类似的反推问题。问题描述:1、妈妈有2000元,要分给她的2个孩子。由哥哥先提出分钱的方式,如果弟弟同意,那么就这么分。但如果弟弟不同意,妈妈会没收1000元,由弟弟提出剩下 1000元的分钱方式,这时如果哥哥同意了,就分掉这剩下的1000元。但如果哥哥也不同意,妈妈会把剩下的1000元也拿走,然后分别只给他们每人100元。问:如果你是哥哥,你会提出什么样的分钱方式,使你有可能得到最多的钱?(最小单位1元)2、有5个海盗,按照等级从5到1排列。最大的海盗有权提议他们如何分享100枚金币。但其他人要对此表决,如果多数(所有人中的多数)反对,那他就会被杀死。他应该提出怎样的方案,既让自己拿到尽可能 阅读全文
posted @ 2012-04-05 10:38 笔记吧... 可能只有自己看得懂 阅读(1461) 评论(3) 推荐(0)