腾讯笔试(1)

问题:A从2到99之间抽了2个数字,把和告诉B,积告诉C
B说我不知道这2个数,但是C也肯定不知道
C说我开始确实不知道,但是现在知道了
B说这样我也知道了
求这2个数.为什么?
我的解答
首先, 正确答案是4和13
设B得到的和记做B,C得到的积记做C,这两个数记做x和y。
1.预备结论,
a)100以内的质数有25个,如下:
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,
b)歌德巴赫猜想,任何大于6的偶数都能写成两个奇质数的和。
c)B明显大于等于6,而小于等于196
2.一些更要结论。
a)B不可能是偶数。因为B如果是偶数,而偶数都能写成两个奇质数的和,例如22=5+17,那么如果C=5*17=85,则因为C=85只有一种质因数分解方式,所以C知道这两个数是5和17。也就是说,B说“我不知道这2个数,但是C也肯定不知道”这句话是错误的,C有可能知道。
b)B是奇数,并且一定不能写成两个质数的和。例如若B=19,那么就有可能是2和17,如果C=34=2*17,只有一种质因数分解方式,所以C知道这两个数。
那么不能写成两个质数的和的奇数见下:记做集合M
11,17,23,27,29,35,37,41,47,51,53,57,59,65,67,71,77,79,83,87,89,93,95,97,还有100至196之间的奇数(因为例如103,虽然=101+2,但是101一经大于100)
这些数的思路是这样的,奇数=两个质数和,那一定有一个数是2。不如分析30-40的,可以用排除法,奇数有31,33,35,37,39,但是29+2=31,31+2=33,37+2=39所以要排除31,33,39剩余35,37。
所以B只可能是集合M中的数。
c)B可有多种可能的分解方式,但是只有一种是可以确定的。这句话如果不理解,后面有例子。
3.实际这个题可以分为两个重要部分,一是找到一组这样个数,并证明这组数符合条件,而是证明其它的数组不满足条件。本人只能证明的一部分,第二部分我目前没有更好的方法,只能是列举排除法。
4.下面实例分析
a)若B=11
x=2,y=9,那么C=18=3*6,C会这样想,如果是3和6,那么B=9,而9可以是2+7,那么我C就是14,我肯定可以知道是2和7,所以不能是3和6。也就是说若B=11,B可以判断出是x=2,y=9
x=3,y=8,那么C=24=2*12=4*6,无论2+12,还是4+6都是偶数,可以排除,B可以判断出是x=2,y=9
x=4,y=7,C=2*14,2+16也可以排除,B可以判断出是x=2,y=9
x=5,y=6,C=2*15,2+15=17,17是集合M中的数,也就是说C知道这两个数是什么,但是B不能确定。
B有三组可以确定,那么,B就不知道究竟是那组了,只有一组能判断出来才可以。
一个结论:
(ⅰ)C可以有多中分解方式,但分解中的x+y的和如果是M中的数,那说明这种分解方式不能排除,反之则能排除。
(ⅱ)如果B的几种不同分解方式,有两个或以上的C可以确定,那么这样的B不满足条件(B说这样我也知道了)
(ⅲ)如果C的分解方式中x或y是4,8,16……2^2,另一个是质数,那么这种分解方式可以排除,因为,此时C的其他分解方式不过是,把质因数2分给质数,这样两个数都是偶数了,那么和B也成了偶数,这和前面的结论是矛盾的。
b)若B=17
x=2,y=15,那么C=30=5*6,5+6=11,属于M,不能排除。
x=3,y=14,那么C=42=2*21,2+21=23,属于M,不能排除。
x=4,y=13,那么C=52=2*26,2+26=28,不属于M,可以排除。
x=5,y=12,那么C=60=3*20,3+20=23,属于M,不能排除。
x=6,y=11,那么C=66=2*33,2+33=35,属于M,不能排除。
x=7,y=10,那么C=70=2*35,2+35=37,属于M,不能排除。
x=8,y=9,那么C=72=3*24,2+24=27,属于M,不能排除。
这样,只有一组可以排除,那就是说,如B=17,C根据他知道的积,只有在C=52时,C才能判断出来,其余不能判断。
c)其他的排除法,我只给出可以排除的两种方法。(运用了结论(ⅲ))
23=4+17=16+7。。27=4+23=8+19。。29=2+27=16+13。。35=4+31=32+3。。
37=8+29=32+5。。41=4+37=32+9。。47=4+43=16+31。。51=4+47=8+43。。
53=4+47=8+43。。57=4+53=16+41。。59=4+55=16+43。。65=4+61=16+49。。
67=8+59=64+3。。71=4+67=64+7。。77=4+73=64+13。。79=8+71=64+15。。
83=4+79=64+19。。87=4+83=64+23。。89=16+73=64+25。。91=8+83=64+27。
93=4+89=64+29。。97=4+93=64+33。。
超过100的奇数属于集合M,所以还要研究这些数,当实在过于繁琐,可以用64,32,尤其是64,因为它再乘以任何质数都将超过100,所以很容易找到一种,至于另一种留给读者吧。

B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少


大题:

1 把字符串转换为小写,不成功返回NULL,成功返回新串

char* toLower(char* sSrcStr)
{
          char* sDest= NULL;
          if( __1___)
          {
              int j;
              sLen = strlen(sSrcStr);
              sDest = new [_______2_____];
              if(*sDest == NULL)
                  return NULL;
              sDest[sLen] = '/0';
              while(_____3____)
                 sDest[sLen] = toLowerChar(sSrcStr[sLen]);
          }
          return sDest;
}
1sSrcStr!=NULL   2 sLen+1    3--sLen&&isUpper(sSrcStr[sLen])
2 把字符串转换为整数 例如:"-123" -> -123

main()
{
          .....
          if( *string == '-' )
              n = ____1______;
          else
              n = num(string);
          .....
}

int num(char* string)
{
          for(;!(*string==0);string++)
          {
              int k;
              k = __2_____;
              j = --sLen;
              while( __3__)
                  k = k * 10;
              num = num + k;
          }
          return num;
}
-num(*string++)    int(*string)   j--
附加题:

1 linux下调试core的命令,察看堆栈状态命令

2 写出socks套接字 服务端 客户端 通讯程序

3 填空补全程序,按照我的理解是添入:win32调入dll的函数名  
        查找函数入口的函数名 找到函数的调用形式
        把formView加到singledoc的声明 将singledoc加到app的声明

4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
        1 问上课程 "db"的学生no
        2 成绩最高的学生号
        3 每科大于90分的人数

1。有一栋十层楼的楼,在每个电梯门口放上一颗钻石,这些钻石的大小不同,一人坐电梯从一楼,电梯每到一层楼都开一次门,而且这个人能准确的分辨钻石的大小,请问怎么样能拿到最大的钻石,只有一次机会(就是出了电梯门就进不来了)

2。请估计广州中信大厦是否坚固,写出推理过程。
学校里成绩的高低好坏,对人生来说还言之过早。

1,为节省空间,两个栈共用一个空间,栈底在两边,问什么时候表明空间用完

     答案 : 栈顶相遇时
    这道题就是很基础的一个题目,因为是第一道题,所以印象比较深^_^
2,char A[5]; char* B ="abcdefg"; void * C; C = new char[100];
      sizeof(A) sizeof(B) size(C)
5,4,4
 
3, 爸爸 , 妈妈 , 妹妹 , 小强 , 至少两个人同一生肖的概率是多少
      1- 12*11*10*9/12*12*12*12 = 43% , 我忘用 1 减了 ....
 
然后还有几个看程序给结果的题,考察了类,指针的内容
第二部分:程序填空
   主要要能看出他的思路
第三部分:写代码
     1,关于mfc的,一个控件,显示时间,1s钟刷新一次
     2,SQL语言进行简单的数据库操作,建表,查询,求平均工资等
     不记得语言了,因此只好自创....ft
     3,Unix 进程通信有哪些方式 , 各有什么特点 ?
     (其中A卷给的是道网络编程题目)
第四部分:主观题
考rp的,比较无聊,手都写酸了....
程序4说明]
 
设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分
(设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“
,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
 
本程序输入列表 , 生成一棵  M  叉树 , 并由  M  叉树输出列表。假定输入无错误。
[程序4]
#include〈stdio.h〉
#include〈stdlib.h〉
#define M 3
typedef struct node{ char val;
struct node *subTree[M];
} NODE;
char buf[255] ,*str = buf
NODE *d = NULL
NODE *mackTree( ) /*由列表生成M叉树*/
{ int k; NODE *s ;
s = __(1)__
s -> val = *str++ ;
for ( k = 0 ; k < M ; k++ ) s-> subTree[k] = NULL ;
if(*str='( '){
k = 0;
do { str++;
s -> subTree[k] = __(2)__ ;
if ( *str == ')' ) { str++; break ; }
k = k+l ;
} while ( __(3)__ );
}
return s ;
}
void walkTree( NODE *t ) /*由 M 叉树输出列表*/
{ int i ;
if( t != NULL ) {
__(4)__
if ( t -> subTree[0] == NULL ) return ;
putchar ( '( ' ) ;
for ( i = 0 ; i < m ; i++) {
__(5)__
if ( i! = M - l && t -> subTree[i+l] != NULL )
putchar ( ', ' ) ;
}
putchar ( ') ' ) ;
}
}
 
void main( )
{ printf( "Enter exp:" ) ;
scanf( "%S" , str ) ;
d = makeTree() ;
walkTree( d ) ; putchar( '/n') ;
}
 
 
有两个集合    
集合 A{1 7 19 21 55 100 。。。 }   
集合 B{7 22 100 。。。 }   
两个集合都是 10 万个数据 ( 已排序 ) ,要求写一个算法,判断 B 是不是 A 的子集,算法时间复杂度为 Q N

wangyi

1、10个人分成4组 有几种分法?

2、如图:
   7      8      9      10
   6      1      2      11
   5      4      3      12
   16 15 14 13
  设“1”的坐标为(0,0) “7”的坐标为(-1,-1) 编写一个小程序,使程序做到输入坐标(X,Y)之后显示出相应的数字。

3、#include<stdio.h>
  //example input and output
  //in 1 2 3 out 1 3 1
  //in 123456789 2 100 out 123456789 100 21
  long mex(long a,long b,long c)
  { long d;
   if(b==0) return 0;
   if(b==1) return a%c;
   d=mex(a,b/2,c); d*=d;这里忘了;d*=mex(a,b%2,c);d%=c;
   return d;
  }
  int main(void)
  { long x,y,z;
   while(1)
   { if(scanf(%d %d %d,&x,&y,&z)>3) return 0;
   if(x<0) { printf("too small ");continue;}
   if(y<0) { printf("too small ");continue;}
   if(z<1) { printf("too small ");continue;}
   if(y>z) { printf("too big ");continue;}
   if(z>1000000010) {printf("too big ");continue}
   printf(%d %d %d,x,z,mex(x,y,z);
  }}
  根据这个程序,当已知一个输入,算出输出,如:输入 1 3

7. 希尔 冒泡 快速 插入 哪个平均速度最快?
答案:快速排序
快速排序、归并排序和基数排序在不同情况下都是最快最有用的。

8. enum的声明方式
答案:enum 枚举类型名 {
               枚举常量1,
               枚举常量2,
               ...
               枚举常量n
              };
For example:
enum weekday { sunday, monday, tuesday, wednesday, thursday, friday, saturday};
enum weekday week_day;//week_day 就是一个枚举类型变量

9. 频繁的插入删除操作使用什么结构比较合适,链表还是数组?
答案:链表

10. *p=NULL *p=new char[100] sizeof(p)各为多少?
答案:都为4。因为都是指针类型,所占存储空间必然为4。

11. 顺序查找的平均时间
答案:(1+2+3+...+n)/n = (n+1)/2

12. for(i=0,sum=0; i<10; ++i,sum+=i);的运行结果
答案:sum = 55

13. 不能做switch()的参数类型是:
答案:switch的参数不能为浮点型。

14.不使用其他变量,交换两个整型a,b的值
答案:x = x+y; y = x-y; x = x-y

15. 写出float x 与“零值”比较的if语句。
if(x>=0.000001 && x<=-0.000001)(x不为0的比较)
float: 6位精度
double: 16位精度

16.

两个数相乘,小数点后位数没有限制,请写一个高精度算法


*************************************************************************************
数据库
*************************************************************************************
1. 有个表tableQQ,有整型的ID项和字符类型的Nickname项,这两个项都不允许为空
  (1)写出建立该表的SQL语句
  (2)找出Nickname为QQ的用户,按ID降序排列的SQL语句
  (3)写出删除ID为1234用户记录的SQL语句
  (4)写出添加ID为5555,Nickname为'1234'的SQL语句
答案:
  (1) CREATE TABLE tableQQ
      (
       ID NUMBER(12) NOT NULL,
       Nickname Varchar2(30) NOT NULL
       );
      
  (2) select * from tableQQ where Nickname = 'QQ' order by ID desc;
 
  (3) delete from tableQQ where > 
  (4) insert into tableQQ values(5555,'1234');
 
  //删除表
  (5)drop table tableQQ;
 
2. 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
  1 问上课程 "db"的学生
  2 成绩最高的学生号
  3 每科大于90分的人数
答案:
    (1)select a.sno, a.cno, b.cno, b.cname from sc a, c b where a.cno = b.cno and b.cname = 'db'; 
   
    (2)select sno, max(grade)from sc group by sno;
   
    (3)select cno, count(sno) from sc where grade > 90 group by cno;
   
*****************************************************************************************
===========================================================================================

操作系统 网络

===========================================================================================
1. 描述实时系统的基本特性
答案:在特定时间内完成特定的任务,实时性与可靠性。

2. Internet采用哪种网络协议?该协议的主要层次结构?
答案:TCP/IP协议。应用层、传输层、网络层、数据链路层和物理层。

3. Internet物理地址和IP地址转换采用什么协议?
答案:地址解析协议ARP address resolution protocol

4. IP地址的编码分为哪俩部分?
答案:网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值