- 最后登录
- 2012-5-25
- 在线时间
- 7937 小时
- 注册时间
- 2008-7-7
- 阅读权限
- 200
- 精华
- 1065
- 帖子
- 16993
  
- 在线时间
- 7937 小时
- 应届生币
- 144758 枚
- 最后登录
- 2012-5-25
- 阅读权限
- 200
- 精华
- 1065
- 帖子
- 16993
|
发表于 2008-8-19 14:54:03
|显示全部楼层
<P><BR>1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句<BR>2、如何输出源文件的标题和目前执行行的行数<BR>3、两个数相乘,小数点后位数没有限制,请写一个高精度算法<BR>4、写一个病毒<BR>5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?</P>
<P>2005年腾讯招聘<BR>选择题(60) <BR> c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个! <BR>程序填空(40) <BR>1.(20) 4空x5 <BR> 不使用额外空间,将 A,B两链表的元素交叉归并 <BR>2.(20) 4空x5 <BR>MFC 将树序列化 转存在数组或 链表中!</P>
<P> </P>
<P>1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句</P>
<P>// 这样转向定义应该不算违规吧!^_^</P>
<P> </P>
<P>#include "stdafx.h"</P>
<P>#include <string.h></P>
<P>#include <iostream></P>
<P>using namespace std;</P>
<P> </P>
<P>#define Cmp(x,y) compare(x,y)</P>
<P> </P>
<P>int compare(int a,int b)</P>
<P>{ </P>
<P> a^=(1<<31); b^=(1<<31); </P>
<P> int i=31; </P>
<P> while((i^-1) && !((a&(1<<i))^(b&(1<<i)))) i--; </P>
<P> return (i^-1)?(((a>>i)&1)?1:-1):0; </P>
<P>}</P>
<P> </P>
<P>int _tmain()</P>
<P>{</P>
<P> int c;</P>
<P> c = Cmp(5,4);</P>
<P> cout<<c<<endl;</P>
<P> return 0;</P>
<P>}</P>
<P> </P>
<P>2.如何输出源文件的标题和目前执行行的行数(不晓得怎么搞,在等兄弟给我答案在!)</P>
<P> </P>
<P>3.两个数相乘,小数点后位数没有限制,请写一个高精度算法</P>
<P> 算法提示: </P>
<P> //想法来自北师大一个同学给我看的另一个题目以及他的java程序。</P>
<P> 输入 string a, string b; 计算string c=a*b; 返回 c;</P>
<P>1, 纪录小数点在a,b中的位置l1,l2, 则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;</P>
<P>2, 去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)</P>
<P>3, 计算c=a*b; (要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)</P>
<P>4, 输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)</P>
<P> </P>
<P>4.写一个病毒(没搞过,^_^)</P>
<P> </P>
<P>5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。</P>
<P>//本算法使用快排,O(n*lg(n)) </P>
<P>//最低可以找到线性算法,使用预先区域统计划分!类试于构造Quad Trees! 写起来代码会长些!</P>
<P> </P>
<P>#include <stdio.h></P>
<P>#include <stdlib.h></P>
<P> </P>
<P>#define Max 100000000</P>
<P>int a[Max+10];</P>
<P> </P>
<P>int cmp(const void *a, const void *b)</P>
<P>{</P>
<P> int *x = (int *) a;</P>
<P> int *y = (int *) b;</P>
<P> return *x-*y;</P>
<P>}</P>
<P> </P>
<P>int main()</P>
<P>{</P>
<P> int n=0;</P>
<P> while(scanf("%d",&a[n])==1) n++;</P>
<P> qsort(a,n,4,cmp);</P>
<P> for(int i=0;i<3;i++) printf("%d",a);</P>
<P> return 1;</P>
<P>}</P>
<P> </P>
<P>5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?</P>
<P>Solution:</P>
<P>The First Time: A(1)和B(2)过桥,A(1)返回 Cost:1+2 <BR>The Second Time: C(5)和D(10)过桥,B(2)返回 Cost:10+2 <BR>The Third Time A(1)和B(2)过桥 Cost:2 </P>
<P>Total Time Cost: (1+2)+(10+2)+2=17 minutes</P> |
|