随笔分类 -  笔试面试题

摘要:题目:输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。思路:回溯法建立一个数组记录字符串中的字符出现与否,如字符串abc,int A[3],A={1,0,1},就代表字符ac。代码:#include #include using nam... 阅读全文
posted @ 2015-07-24 15:16 AndyJee 阅读(577) 评论(0) 推荐(0)
摘要:题目:用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0。思路:这道题与上一篇博文N!尾部连续0的个数的思路是一样的。计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被连续进位多少次,只要将N!因式分解成3^m*other,m就是答案。技... 阅读全文
posted @ 2015-07-01 09:32 AndyJee 阅读(965) 评论(0) 推荐(0)
摘要:题目:对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。(不用考虑数值超出计算机整数界限的问题)思路:1、直接计算N!的值,然后统计尾部0的个数,时间复杂度O(n);2、发散思维,想想尾部为0的数是怎么得到... 阅读全文
posted @ 2015-07-01 09:05 AndyJee 阅读(2742) 评论(0) 推荐(0)
摘要:题目:数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。思路:很明显,在数组中寻找某个数的复杂度为O(n),但在某些特殊数组中,可以通过寻找规律来减少比较次数。上述数组的规律就是:相邻元素... 阅读全文
posted @ 2015-06-25 15:46 AndyJee 阅读(1158) 评论(0) 推荐(0)
摘要:题目:话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先. 晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄... 阅读全文
posted @ 2015-06-25 11:28 AndyJee 阅读(1254) 评论(0) 推荐(0)
摘要:题目:一个整数组里包含0-(n-1)的排列 (0到(n-1)恰好只出现一次),如果每次只允许把任意数和0交换,求排好顺序至少交换多少次。思路:这是组合数学中的圈问题,可以把数组中的位置关系看成图的拓扑关系。例如A[3]={2,0,1},2在0的位置,0在1的位置,1在2的位置,那么把它们画成图的拓扑... 阅读全文
posted @ 2015-06-17 16:07 AndyJee 阅读(4590) 评论(2) 推荐(0)
摘要:题目:字符串只有可能有A、B、C三个字母组成,如果任何紧邻的三个字母相同,就非法。求长度为n的合法字符串有多少个?比如: ABBBCA是非法,ACCBCCA是合法的。思路:1、枚举方法:数学组合问题,枚举所有情况,然后判断是否为合法串,并统计个数。时间复杂度:O(3^n)2、动态规划:假设:dp[i... 阅读全文
posted @ 2015-06-17 14:54 AndyJee 阅读(1410) 评论(0) 推荐(0)
摘要:题目:给定一个数n, 求不超过n的所有的能被3或者5整除的数的和。例如: n = 9,答案3 + 6 + 5 + 9 = 23。思路:能被3或者5整除的数是哪些?被3整除的数:3,6,9....[n/3]*3被5整除的数:5,10,15...[n/5]*5重复的数(同时被3和5整除的数,即被15整除... 阅读全文
posted @ 2015-06-17 10:16 AndyJee 阅读(1320) 评论(0) 推荐(0)
摘要:题目:要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个... 阅读全文
posted @ 2015-06-15 20:41 AndyJee 阅读(700) 评论(0) 推荐(0)
摘要:题目:输入:整数A输出:整数B条件:A和B的二进制1的个数相同,且A和B之间的距离|A-B|最小。思路:题目没有说明整数类型,这里认为是带符号的整数,即区分正负数。根据题意,A和B的二进制1的个数相同,且要求距离最小,那么A和B的差别就在于相邻的bit位,如1100和1010,0011和0101等。... 阅读全文
posted @ 2015-06-15 20:06 AndyJee 阅读(822) 评论(0) 推荐(0)
摘要:以下两段程序的输出是什么?程序1:#include "stdio.h"class Base { public: int Bar(char x) { return (int)(x); } virtual int Bar(int x) { ... 阅读全文
posted @ 2015-06-15 16:38 AndyJee 阅读(1556) 评论(0) 推荐(0)
摘要:题目:如题所示思路:看一个实例,1011*1010,由于二进制的特殊性,可以将该乘法运算表达式拆分为两个运算,1011*1000以及1011*0010的和,对于二进制运算,左移一位,等价于乘以0010,左移三位,等价于乘以1000,因此两者的乘积为10110+1011000之和,即为1101110.... 阅读全文
posted @ 2015-06-14 22:56 AndyJee 阅读(2487) 评论(0) 推荐(0)
摘要:题目:如题所示思路:逻辑运算,即二进制运算,无外乎与&、或|、非~、异或^以及移位>>,using namespace std;// recursive methodint add_1(int num1,int num2){ if(num1==0) return num2; ... 阅读全文
posted @ 2015-06-14 22:38 AndyJee 阅读(5222) 评论(0) 推荐(0)
摘要:题目:如题所示思路:与上一题要求不一样的是,这里是整数的除法,而不仅仅是正整数,因此需要对输入的两个数的正负性进行判断代码:#include using namespace std;int myDiv(int a,int b){ if(a==0) return 0; if(... 阅读全文
posted @ 2015-06-14 16:04 AndyJee 阅读(1231) 评论(0) 推荐(0)
摘要:题目:如题所示思路:假设问题是a除以b:题目要求是正整数,所以考虑的条件不是很多,如果要求是整数的话,即要考虑正负情况的判断。1、最简单的就是依次用被除数a减去除数b,并统计减去的次数,即为相除结果;这种方法效率不高,尤其是在被除数a很大,除数b很小的情况下,效率非常低;2、考虑每次相减时,将b翻倍... 阅读全文
posted @ 2015-06-14 15:41 AndyJee 阅读(3860) 评论(0) 推荐(0)
摘要:题目:坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?思路:这是一道简单的数组题,方法也很简单:直接从左到右扫描,两个指针i和j,i从位置0开始,j从位置1开始,如果a[j] - a[i] L,则j--回退,覆盖点个数-1... 阅读全文
posted @ 2015-06-08 16:10 AndyJee 阅读(459) 评论(0) 推荐(0)
摘要:题目:数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0weight[i]另外,如果想知道是由那几件物品组成的最大价值,可以从后往前回溯,当V[i][j]>V[i-1][j],说明第i件物品被加入(路径不唯一)。代码:#include #include usin... 阅读全文
posted @ 2015-06-01 10:42 AndyJee 阅读(14669) 评论(3) 推荐(1)
摘要:题目:给定N张扑克牌和一个随机函数,设计一个洗牌算法思路:假设数组A存的是扑克牌代表的数字,则洗牌的过程就是数组中元素交换的过程。洗牌是个随机的过程,也是一个排列组合的过程。假设有N张牌,则其排列组合的可能情况为N!=N*(N-1)*....*2*1。有两种的随机洗牌函数:1、A[i]=A[rand... 阅读全文
posted @ 2015-05-25 16:33 AndyJee 阅读(782) 评论(0) 推荐(0)
摘要:题目:若对于整数N,在集合{1,2……,N}中找出m个数,使其和等于剩下的N-m个数的和。返回所有可能的组合数,N#includeusing namespace std;#define N 8int count=0;void Sum(int *nums,vector out,int sum,int ... 阅读全文
posted @ 2015-05-25 16:05 AndyJee 阅读(605) 评论(0) 推荐(0)
摘要:题目:现有一个 n 位数,你需要删除其中的 k 位,请问如何删除才能使得剩下的数最大?比如当数为 2319274, k=1 时,删去 2 变成 319274 后是可能的最大值。思路:1、贪心算法每次从高位向低位数,删除高位数字比低位数字小的那位数字。如2319274第一次21,略过,1 > nums... 阅读全文
posted @ 2015-05-25 11:10 AndyJee 阅读(1255) 评论(0) 推荐(0)