Net程序员一般不会太重视算法问题,因为工作中很少有机会用到,相比之下需求分析和构架设计的能力更为重要。反过来讲,算法能力也不能完全代表编程水平,更不能代表解决实际问题的能力。
但相信只要有程序员的地方,就会有人对算法感兴趣,即使在.Net版,也会有不少乐于思考某些不切实际问题的同志。
附一些实际工作中绝不会遇到的问题,大家可以测试一下自己对于这类问题的应对能力。
入门
1、一个长为10万的数组A,给出100万对下标i和j,其中i为起始下标,j为结束下标,j >= i,计算A[i]+A[i + 1] + ..... A[j](将这100万次计算结果存在数组)
2、共有40级台阶,每一步可以上1级,也可以上2级,问上这40级台阶共有多少种不同的走法
3、写段程序计算两个自然数A和B的最小公倍数
初级
1、123456789的阶乘后面有多少个0?
2、123456789的123456789次方 % 987654321 = ?
3、输出由1223334444打乱顺序后组成的所有数。
例如:1234234344
一级
1、100元钱换零钱(50、20、10、5、2、1元,5、2、1角),共有多少种不同的方法(只求数量即可,不用求全部解,经常出现的问题)
2、设数组A包括了全部由A-O组成的长为15的字符串,A-O各出现一次,并且数组A是有序的(第一个元素是ABCDEFGHIJKLMNO,最后一个元素是OMNLKJIHGFEDCBA),随便给出一个数组A中的字符串,输出他在A中的位置,例如ABCDEFGHIJKLMNO,输出0,OMNLKJIHGFEDCBA输出1307674367999)
3、输出所有8皇后问题的解,需要注意的是,某些解可以通过其他解旋转90,180,270度而获得,这样的解只算1个(需要去掉重复)。
二级
1、有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占R[i]个空间,储存计算结果则需要占据O[i]个空间(其中 O[i]<R[i])。问怎么安排这n个请求的顺序,使得所有请求都能完成。你的算法也应该能够判断出无论如何都不能处理完的情况。比方说,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6。在这个例子中,我们可以先运行第一个任务,剩余9个单位的空间足够执行第二个任务;但如果先走第二个任务,第一个任务执行时空间就不够了,因为10>14-6。(其实是Google的一个笔试题,会者不难,难者不会)
2、两个长为100万的数组A和B,A和B中的元素都满足0 < A[i] B[i] < 2^31,用数组A中的元素和数组B中的元素两两相乘,得到数组C(A[0] * B[0],A[0] * B[1],A[0]*B[2] ......A[1] * B[0],A[1] * B[1]......A[999999] * B[999999]),C共有10^12个元素,现在随便给出一个数K,请你找出C中第K大的元素。
3、一个长为10万的数组A,给出100万对下标i和j,其中i为起始下标,j为结束下标,j >= i,找出A[i] - A[j]之间的最大值(将这100万次统计结果存在数组)。
涉及敏感词,再高一级的就不写了,如果你觉得以上问题都过于简单,请给我发私信索要更难的题目,或给我发一份简历,呵呵。
09-05