腾讯Tencent

1、一个商场进行一场抽奖活动,其中有两个奖项,第一个奖项A抽中的概率是1/6,第二个奖项B抽中的概率是5/6;用C语言编码实现这个抽奖程序。 题目通过一个XML文档给出。

生成一个真随机数。

随机数对6取余,得到的余数一定是0、1、2、3、4、5共六个数。

将这六个数分成两份(A和B),其中一份只有0这一个项,其余一份有1、2、3、4、5五个项。对随机数取余后的数进行比较,看它那一份中,借此判断出本次抽奖的结果。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
bool draw(); // 抽奖函数,结果为A返回true,结果为B返回false
int main()
{
char ret;// 记录结果
if(draw()) // 进行抽奖
ret='A';// 返回true,抽奖结果为A
else // 否则结果为B
ret='B';
printf("抽奖结果为:%c\n",ret); // 输出抽奖结果
return 0;
}
bool draw() // 抽奖函数实现
{
int ran; // 记录随机数对六取余的值
srand( (unsigned)time( NULL ) ); // 置随机数种子
ran = rand()%6; // 随机数对6取余
if(0 == ran) // 若ran为0
return true; // 返回true
else // 若ran不为0 ,返回false
return false;
}

2、珠宝商甲需要去鉴定一批41克以下的宝石(可能是41克以下不包括41克的任意重量),他只能携带一个天平和四个砝码去称重,请问他会携带那些重量的砝码?

采用三进制,即3^4 = 81
所以进一步地,就是解决如何用4位3进制数来表示40这个数,即

40/3 = 13---1
13/3 = 4---1
4/3 = 1---1
1/3 = 0---1
三进制表示为1111,即

1*3^3+1*3^2+1*3^1+1*3^0 = 27+9+3+1
所以这四个砝码的重量为27,9,3和1


3、同一进程下的线程可以共享以下? BD
A stack B data section C register set D file fd


解释:
stack 栈
data section 数据段
register set 寄存器组
file fd 文件描述符

补充:

1) 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。

2) 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:

枪1.线程ID

每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。

枪2.寄存器组的值

由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上 时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。

枪3.线程的堆栈

堆栈是保证线程独立运行所必须的。

线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈, 使得函数调用可以正常执行,不受其他线程的影响。

枪4.错误返回码

由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该 线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被修改。

所以,不同的线程应该拥有自己的错误返回码变量。

枪5.线程的信号屏蔽码

由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都 共享同样的信号处理器。

枪6.线程的优先级

由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。


4、在不使用sizeof()函数的情况下,取出本机的整形所占位数,如32位、64位等。

分析

在计算机中,常用的基本类型为:char、short int、long int、float、double。所以本体的巧妙之处在于,你不知道这个整形到底是长整形还是短整型。因此,不同的操作系统整形所占的位数长度是不同的。在常见的Windows操作系统中,int型其实是short int型;在其他的系统中则并不一定。

但是在所有计算机中字符型(char)均占用一个字节,其他类型都比int型长(或相等),因此这道题需要通过char类型来确定int型所占位数。

西瓜具体设计思路如下:

申请一个整形变量并对其赋值。

申请一个字符型数组,将字符型数组的首地址指向上面申请的整形变量。

申请一个新的字符型数组和新的整形变量,并用新的数组首地址指向新的整型变量,将上面的字符型数组从头开始每一个元素对新的字符型数组进行赋值,赋值完后,比较两个整形是否相等,若想等则观察两个数组一共有几个元素相等,借此判断出整形占用几个字节。

将字节转化为位数。


5、写一个双链表中删除一个元素和加入一个元素的程序

s->next=p->next;p->next->prior=s;s->prior=p;p->next=s;

p->next=p->next->next;p->next->next->prior=p;


6、qq聊天采用哪种连接

凡是是即时通信软件,原理都是大同小异的。
QQ都是使用UDP协议进行发送和接收“消息”的。当你的机器安装了QQ以后,实际上,你既是服务端(Server),又是客户端(Client)。当你登录QQ时,你的QQ作为Client连接到腾讯公司的主服务器上,当你“看谁在线”时,你的QQ又一次作为Client从QQ Server上读取在线网友名单。当你和你的QQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传送。如果你和对方的连接不是很稳定,QQ服务器将为你们的聊天内容进行“中转”。大致过程就是:
1、用户首先从软件服务器上获取好友列表,以建立点对点的联系;
2、用户(Client1)和好友Client2之间采用UDP方式发送信息;
3、如果无法直接点对点联系,则用服务器中转的方式完成。


版权声明:本文为lebranc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。