腾讯 2016届实习生招聘笔试

腾讯2015(2016届)实习生校招笔试,除了选择题外,还有五道大题,其中三道算法类的题。


第一题:抽奖算法实现

题目:

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

基本思想:

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

源代码:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

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;
}

int main()
{
    char ret;// 记录结果
    if(draw())  // 进行抽奖
        ret='A';// 返回true,抽奖结果为A
    else        // 否则结果为B
        ret='B';
    printf("抽奖结果为:%c\n",ret);  // 输出抽奖结果
    return 0; 
}

第二题:整形长度算法实现

题目:

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

基本思想:

整数1,一直左移,当移到小于0的时候,它移了多少位,本机的整形就占用多少位。

源代码:

#include <stdio.h>

int main()
{
	int x=1;
	int i=1;
	while(x>0)
	{
		x=x<<1;
		i++;
	}
	printf("%d\n",i);

	return 0;
}

其他方法

http://blog.csdn.net/MichealGeng/article/details/45148995


第三题:C/S模型压力算法实现

题目:

在某个C/S模型中,服务器最大的处理量是每秒10000次,设计一个算法,保证服务器可以正常运行

基本思想:

  1. 客户端每发出一个请求,都保存在服务端的请求队列中,若服务端请求队列等于10000,以后的请求,都不加入队列,且对客户端做出异常反馈。
  2. 客户端每发来一个请求,处理完请求后,计算等待时间,若等待时间大于1秒,将请求队列中的所有请求发送给服务端处理功能模块,清空等待队列,清空等待时间
  3. 周而复始进行循环

源代码:

 #include<time.h>
 double Clock_start = 0;      // 记录开始时间
 double Clock_end = 0;        // 记录等待时间
 int count = 0;               // 记录请求队列数目
 bool client = false;         // 是否有客户请求
 // 算法实现
 void ProtectServer()    
 {
     while(1){                // 使服务端一直运行
     if(1000 <= Clock_end)    // 如果等待时间大于一秒
     {
         /* 处理当前等待队列的所有请求 */
         Clock_start = clock();   // 记录当前时间
         count = 0;
     }
     /* 接收客户端请求,有客户请求时,将client赋值为true */
     if(client)              // 如果有客户接入
     {
         if(count<10000)     // 当前客户请求队列是否大于10000
         {
             count++;        // 客户队列+1
             /* 将客户端请求信息存储在请求队列 */
         }
         else                // 请求队列满时抛出异常
         {
             /* 给服务器抛出满载异常 */
         }
     }
     client = false;         // 客户请求初始化
     Clock_end = clock() - Clock_start;  // 计算等待时间
     }
 }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值