面试题
文章平均质量分 55
liuhmmjj
对计算机编程很有兴趣
展开
-
给定一个正整数,找到由相同数字组成的下一个更大的数字
比如63543,这个数包含6,3,5,4,3,将这些数字重新组合以后,产生下一个较大的数字,那么就是64335。思路与代码:import java.util.ArrayList;import java.util.Comparator;import java.util.List;public class NextBigger { public static int getNextBigger(int num) { //将数字的每个位数转化为数组 i原创 2020-11-01 17:20:07 · 1388 阅读 · 1 评论 -
C语言实现捞鱼问题
捞鱼问题:20个桶,每个桶中有10条鱼,用网从每个桶中抓鱼,每次可以抓住的条数随机,每个桶只能抓一次,问一共抓到180条的排列有多少种。分析:看看这个问题的对偶问题,抓取了180条鱼之后,20个桶中剩下了20条鱼,不同的抓取的方法就对应着这些鱼在20个桶中不同的分布,于是问题转化为将20条鱼分到20个桶中有多少中不同的分类方法(这个问题当然也等价于180条鱼分到20个桶中有多少种不同的方法原创 2015-02-01 15:01:55 · 1480 阅读 · 0 评论 -
从给定的N个正数中选取若干个数之和为M
#include #include using namespace std;void find_seq(int sum, int index, int * value, listint> & seq){ if(sum 0 || index 0) return; if(sum == value[index]) { printf("%d ", valu原创 2015-02-01 13:21:25 · 4033 阅读 · 0 评论 -
盛大游戏关于vector删除元素面试题
下列代码的输出为:#include "iostream" #include "vector" using namespace std; int main(void) { vectorint>array; array.push_back(100); array.push_back(300); ar原创 2015-03-15 19:01:38 · 1155 阅读 · 0 评论 -
(百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。1、把整数放到字符数组里面去,从高位为低位(用变量i)扫描,找到重复的数位,重复数位为“99”跳到第2步,否则跳到第3步,若没有重复的数位,则该数为不重复数,返回;2、遇到“99”的重复数,则把“99”改为“00”,然后在“99”前面一位字符加1,把原创 2015-04-07 12:10:48 · 2563 阅读 · 0 评论 -
正整数分解为几个连续自然数之和
题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8有些数可以写成连续N(>1)个自然数之和,比如14=2+3+4+5;有些不能,比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢?一个数M若可以写成以a开头原创 2015-04-08 12:55:08 · 5149 阅读 · 2 评论 -
用rand7()构造rand10()
rand7生成7个整数,没有办法均匀的映射成10个整数,但是运行两次rand7可以生成49个数字,如果这49个数字是均匀分布的,舍去多余的9个,剩下的40个正好可以用模10运算映射到10个整数上。代码1view plainint i; do { i = 7 * (rand7() - 1) + rand7(); // it is原创 2015-04-14 16:06:27 · 2132 阅读 · 0 评论 -
++it和it++的优劣
[cpp] view plaincopy1、for(iterator it = V.begin(); it != V.end(); ++it) 2、for(iterator it = V.begin(); it != V.end(); it++) 分析:(1)这两个式子的结果肯定是一样的。(2)俩式子效率不同。++it返原创 2015-03-27 22:36:22 · 1856 阅读 · 0 评论 -
荷兰国旗
题目描述拿破仑席卷欧洲大陆之后,代表自由,平等,博爱的竖色三色旗也风靡一时。荷兰国旗就是一面三色旗(只不过是横向的),自上而下为红白蓝三色。该问题本身是关于三色球排序和分类的,由荷兰科学家Dijkstra提出。由于问题中的三色小球有序排列后正好分为三类,Dijkstra就想象成他母国的国旗,于是问题也就被命名为荷兰旗问题(Dutch National Flag Problem)。下原创 2015-04-15 12:29:18 · 2304 阅读 · 0 评论 -
从给定的N个正数中选取若干个数之和最接近M
解法:转换成01背包问题求解,从正整数中选取若干个数放在容量为M的背包中。可以用01背包的一维数组进行求解。程序代码:#includeconst int MAX=100;int f[MAX];int g[MAX][MAX];void SumToM(int *value,int N,int M){int i;int v;for(i=0;i{原创 2015-01-25 10:52:02 · 5166 阅读 · 0 评论 -
关于大小端和union的一道极易错的笔试题
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。union类型是共享内存的,以size最大的结构作为自己的大小下面的程序是在小端CPU上运行的( 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中)#includeu原创 2015-01-25 11:37:03 · 939 阅读 · 0 评论 -
删除模式串中出现的字符
删除模式串中出现的字符,如“welcome to asted”,模式串为“aeiou”那么得到的是“wlcm t std”。#include using namespace std; char *re(char *str,char *model) { if(str==NULL||model==NULL)原创 2015-01-24 19:38:13 · 825 阅读 · 0 评论 -
让你彻底会算时针和分针之间的角度是多少的问题
经常会出现类似如果你看到时钟上面的时间是X:Y,那么其时针和分针之间的角度是多少?首先计算X小时Y分是多少小时,即X.(Y/60)小时。例如3:15就等于(3+15除以60)小时即3.25小时。然后将结果除以12,得出来所占的比例,然后再乘以360度,得到小时的角度。同理,将Y/60得到分钟所占的比例,然后乘以360得到分钟的角度。然后两者相减。例如 Google面试题原创 2015-01-24 17:56:03 · 3767 阅读 · 0 评论 -
常见的笔试面试的智力题
笔试面试中常见的智力题1、桌子上有32瓶无色液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。请问需要多少小白鼠才能找出有毒的那瓶?解答:需要5只将32瓶进行编号(用二进制编号)0瓶 000001瓶 000012瓶 00010……31瓶 11111让第一只小白鼠喝编号第一位为1的那些瓶(即00001,0原创 2015-01-21 17:07:24 · 1772 阅读 · 0 评论 -
一道简单易错笔试题
#includeint main(int argc, char* argv[]) { char c=128; printf("十进制c=%d\n",c); printf("十六进制c=0X%0X\n",c); return 0; }结果为十进制c= -128;十六进制c=0XFFFFFF80;解析:128的十原创 2015-01-27 13:00:05 · 1106 阅读 · 0 评论 -
一道超经典且易错的笔试题
#includeusing namespace std;class A { public: A() { cout ~A() { cout}; class B:public A { public : B(A &a):_a(a) { cout }原创 2015-01-27 11:54:21 · 1030 阅读 · 0 评论 -
第一个出现一次的字符
#include #include char FirstNotRepeatingChar(char* pString){ if(!pString) return 0; const int tableSize = 256; unsigned int hashTable[tableSize]; for(u原创 2015-01-27 10:55:54 · 609 阅读 · 0 评论 -
一道极易出错的笔试题
#include using namespace std; void func(int &x, int *x1) { x-=5;; x1+=10; } int main() { int a=100,b=200; func(b,&a); func(a,&b); cout}原创 2015-01-26 20:12:25 · 917 阅读 · 0 评论 -
一道程序员面试的经典悖论问题
如果叫你从下面两种游戏中选择一种,你选择哪一种?为什么? a. 写下一句话。如果这句话为真,你将获得10美元;如果这句话为假,你获得的金钱将少于10美元或多于10美元(但不能恰好为10美元)。 b. 写下一句话。不管这句话的真假,你都会得到多于10美元的钱。 答案:选择第一种游戏,并写下“我既不会得到10美元,也不会得到10000000美元”。(悖论问题,如果原创 2015-01-25 20:30:03 · 1756 阅读 · 1 评论 -
不用sizeof()函数求当前主机上的一个int占用几个字节
1)宏定义实现: #define MySizeof(Value) (char*)(&Value + 1) - (char*)&Value (char*)&Value返回Value的地址的第一个字节, (char*)(&Value + 1)返回的是Value的地址的下一个地址的第一个字节#include using namespace std;#define my_sizeo原创 2015-04-09 19:25:58 · 1506 阅读 · 0 评论 -
编程之美:黑白球问题
题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:1、每次从桶里面拿出来两个球;2、如果是两个同色的球,就再放入一个黑球;3、如果是两个异色的球,就再放入一个白球;问:最后桶里面只剩下一个黑球的概率是多少?思路1:找规律 使用(黑球个数, 白球个数)来表示桶中黑球和白球的个数变动,正数表示增加,负数表示减少,根据规则原创 2015-04-14 10:49:32 · 3892 阅读 · 4 评论 -
华为机试和尚挑水
#include #includevoid backtrack(int n); /*函数功能:回朔求解第n天至第7天的解(即第n~7天分别安排和尚几)*/ struct st { int spare[8]; /*存储和尚的空闲时间,spare=0表示星期i没有空闲,spare=1表示星期i空闲,其中spare[0]不用*/ int flag; /原创 2015-09-16 16:32:50 · 2109 阅读 · 1 评论 -
怎样不用中间变量temp 实现两个数交换
第一类方法也是常用的方法,通过多次的数值计算来完成交换,到现在知道的有下面三种:(1)加减法。a = a + b;b = a - b;a = a - b;该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如对数据:a = 3.123456b = 1234567.000000交换后各变量值变为:a转载 2015-01-27 15:18:13 · 1209 阅读 · 0 评论 -
二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。。n保证是int范围内的一个整数。输出:对应每个测试案例,输出一个整数,代表输入的那个数中1的个数。样例输原创 2016-06-12 09:24:08 · 5797 阅读 · 0 评论 -
java题一(NK)
public class Square { long width; public Square(long l) { width = l; } public static void main(String arg[]) { Square a, b, c; a = new Square(42L); b = new Square(42L); c = b; long s原创 2016-07-12 10:45:34 · 6243 阅读 · 0 评论 -
随机产生密码
题目:随机产生一个密码,要求同时包含大小写以及数字这三种字符。import java.util.Arrays;/** * Created by l13560 on 2016/11/14. */public class RandomPasswd { public static String randomPasswd(int n){ if(n<3){原创 2016-11-14 19:35:09 · 10378 阅读 · 0 评论 -
二叉树逐层遍历打印
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果思路:使用一个节点队列queue和两个节点指针last和nlast,last表示上一行最后的元素.nlast表示当前正在访问的结点,初始化时nlast=last=root。不断取出队列第一个元素x,然后将x的左右孩子入队并移动nlast到最后一个孩子。然后判断x是否是last,是则打印并换行并将la...原创 2019-01-07 17:55:32 · 11026 阅读 · 0 评论 -
猴子吃桃
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?解析:从最后一天的x=1个,倒推出前一天的个数x,需要注意的是表达式为x=2(x+1),而不是x=2x+1#includeint main()原创 2015-09-16 12:56:59 · 1111 阅读 · 1 评论 -
寻找升序整数数组中元素与对应下标相等的数
问题给定一个升序的整数数组A,让你在数组中找到任意下标x,使得A[x] == x。(数组下标从0开始)例如:[-1, 0, 1, 3, 10]中,x = 3即为所求。解析:最好想的思路就是遍历整个数组,这样时间复杂度为O(N).因为题目提示了是升序的整数数组A,那么就要想到能不能用二分查找的思想。假设我们有一个原创 2015-10-01 10:19:37 · 2145 阅读 · 0 评论 -
从一道面试题看深拷贝、浅拷贝构造函数问题 (经典)
请看下面的程序,说说会出现什么问题?#include #include #include using namespace std; class CDemo { public: CDemo(char*str=NULL) { if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';原创 2015-04-30 10:10:25 · 1099 阅读 · 0 评论 -
字符交替
字符交替:给出两个字符串打印出所有由这两个字符串交替组成的字符串,要求维持原有字符的相对顺序举例:输入“AB”和“CD”输出:ABCDACBDACDBCABDCADBCDAB分析:1、当S1和S2均无字符可用时,则返回空串。2、当其中一个无字符可用,比如S1剩余字符为空,那么把S2剩余字符附在已经得到的字符组合后面,并输出结果。3、其他情况,我们原创 2015-04-28 12:10:42 · 1419 阅读 · 0 评论 -
写一个函数实现*, - , /操作,你能使用的操作只有加法+。
原文:Write a method to implement *, - , / operations. You should use only the + operator.译文:写一个函数实现*, - , /操作,你能使用的操作只有加法+。首先对于这道题目,我们要和面试官确认一下,是不是只针对整数来讨论。 你自己在心里看到这道题目,也要大概估计到应该只在整原创 2015-05-28 16:57:18 · 1428 阅读 · 0 评论 -
如何判断一棵二叉树是完全二叉树
完全二叉树(Complete Binary Tree):设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。解析:任意的一个二叉树,都可以补成一个满二叉树。这样中间就会有很多空洞。在广度优先遍历的时候,如果是满二叉树,或者完全二叉树,这些空洞是在广度优先的遍历的末尾,所以,但我们遍历到空洞的原创 2015-05-25 09:23:52 · 2465 阅读 · 0 评论 -
创新工场笔试题Copy List with Random Pointer
假设有如下一个链表:123456struct Node{ intvalue ; struct Node *next ; struct Node *random ;}其中,random指向该链表的原创 2015-07-19 12:10:39 · 893 阅读 · 0 评论 -
子数组最大乘积
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。解析:此题可以运用动态规划解决设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么f[i+1] = max{f[i]*arr[i+1], g[i]原创 2015-07-20 17:02:44 · 4057 阅读 · 0 评论 -
在字符串中找出连续最长的数字串
#include #include #include int continumax(char *outputstr,char *intputstr) { int maxNum=0,count=0,i;//count计数 char *head=NULL;//head为最长字符串的首地址 while (*intpu原创 2015-01-24 19:44:44 · 812 阅读 · 0 评论 -
腾讯2014实习生笔试题--德梅齐里亚克砝码问题
问题珠宝商甲需要去鉴定一批41克以下的宝石(可能是41克以下不包括41克的任意重量),他只能携带一个天平和四个砝码去称重,请问他会携带那些重量的砝码?来源2014腾讯暑期实习生附加题第一题解决方案第一种这道题的本质应该是这样,用4个数来表示1-40.刚开是我的思路是使用二进制,但是二进制显然是不够的2^4 = 16所以,考试的时候转载 2015-01-24 17:27:30 · 1430 阅读 · 0 评论 -
malloc/free 和 new/delete相关的面试题
1):C++有了malloc/free 为什么还要new/delete?(1)malloc/free只在申请空间时,它们只需要申请空间,无法对空间进行操作。(2)而在创建C++的对象时,不仅仅是需要申请空间,还需要自动调用构造函数,以及在对象消亡之前要自动执行析构函数。因此 C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存原创 2015-03-27 22:20:57 · 1194 阅读 · 2 评论 -
寻找平衡点问题
平衡点:比如int numbers[]={1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点。假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点,要求返回任何一个平衡点。int calcBalance(int arr[], int length){ int *left = new int[len原创 2015-03-17 12:57:22 · 2077 阅读 · 0 评论 -
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。 分析:先颠倒句子中的所有字符,再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然和输入时的顺序保持一致。void Reverse(char *pBegi原创 2015-03-17 12:17:48 · 2164 阅读 · 0 评论