腾讯一笔试题

原创 2007年10月01日 19:06:00

最近看了腾讯05年的一个笔试题,感觉还好,发上来

题目是这样说的:请定义一个宏,比较两个数ab的大小,不能使用大于、小于、if语句

刚刚开始看到这个题目没有什么思路,后来细细想,突然间有用汇编或是其他语言做它的冲动,这样就可以避开大于、小于和if了,哈哈,不过还是老老实实的用c做吧^_^

有个人给了一个答案是:

 

#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
 
#define Cmp(x,y) compare(x,y)
 
int compare( int a, int b)
{
     a^=(1<<31); b^=(1<<31);
     int i=31;
    while ((i^-1) && !((a&(1<<i))^(b&(1<<i))))     i--;
     return (i^-1)?(((a>>i)&1)?1:-1):0;
}
 
int _tmain()
{
     int c;
     c = Cmp(5,4);
     cout<<c<<endl;
     return 0;
}

 我看了看,看着那个按位异或“^”的符号头疼,算起来真麻烦,于是便不看了。

自己想了想,于是用了abs函数和switch语句,通过abs(a-b)和a-b的差就可以得出结果,感觉比它的好理解

前些天又跟学长讨论,学长说可以转换为条件运算符“ ? : ”和“==”,他给了我一个除法的运算的实现:

#define max(a,b) (a==b)?a:((a-b)/abs(a-b)==1?a:b))

后来我突发奇想,其实我的abs减法也可以用条件运算符的于是把自己代码简化了:

#define max(a,b) (abs(a-b)-(a-b))==0?a:b

事后再想想,其实那个“==”也可以去掉了,相减只能得到0或负数,非零即为真,所以可以简化为:

#define max(a,b) (abs(a-b)-(a-b))?b:a

这样应该是最简单的结果了吧?

如果谁有更简单的分享一下哦^_^

感觉做一些题,找个人讨论一下,既有乐趣,又有挑战性,还可以感受到成功的喜悦,爽,哈哈

迅雷的一笔试题:有一个数组,长度为10,有两个线程,一个往里增加数,一个往外删除数

题目:有一个数组,长度为10,有两个线程,一个往里增加数,满了则暂停,空了再继续, 一个往外删除数,没有数据时则暂停,有 了再继续。 感觉:很久的笔试了,当时还有点蒙,做不好。现在才想做一下,使用t...
  • chruan
  • chruan
  • 2013年05月09日 10:50
  • 1361

关于一笔试题(Iterator模式)

作者: Laruence(   ) 本文地址: http://www.laruence.com/2008/10/31/574.html 转载请注明出处 中午的时候,收到一封求教信,是关于这样的一道...

海量数据处理面试题-①笔记

处理海量数据问题,可从以下6点进行:1、分而治之/hash映射+hash统计+堆/快速/归并排序;2、双层桶划分;3、Bloom filter/Bitmap;4、Trie树/数据库/倒排索引;5、外排...

腾讯2015笔试题(含答案)

  • 2015年10月27日 15:01
  • 25KB
  • 下载

腾讯2009校园招聘(软件开发职位方向笔试题与答案)

软件开发职位方向笔试试题(A1卷)               考试时长:120分钟 一、单项选择题。(每个选项3分,20个选项,共60分) 1. 在一个单链表中,若p所指的结点不是最后结...
  • cike211
  • cike211
  • 2013年08月15日 19:46
  • 604

腾讯笔试题精选二

  • 2015年07月11日 11:36
  • 49KB
  • 下载

腾讯2016春招模拟笔试题 —— 编程题(3道)

写在前面的话~       春招 + 模拟笔试  【C++研发】       模拟笔试时间是    2016-03-25   21:30 ~ 22:30          试题主要包括两部分:不定项选...

腾讯后台开发面试题及答案

  • 2015年04月10日 15:13
  • 561KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:腾讯一笔试题
举报原因:
原因补充:

(最多只允许输入30个字)