链表和数组的差别
A 从逻辑结构来看
A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当     数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
A-2. 链表动态地进行存储分配,能适应数据动态地增减的情况,且能方便地插入、     删除数据项。(数组中插入、删除数据项时,需要移动其他数据项)

B 从内存存储来看
B-1. (静态)数组从栈中分配空间, 对于程式员方便快速,不过自由度小
B-2. 链表从堆中分配空间, 自由度大不过申请管理比较麻烦.

堆和栈的差别

solost 于 2004年 10月09日 发表

一、预备知识?
程式的内存分配
一个由c/C++编译的程式占用的内存分为以下几个部分
1、栈区(stack)?   由编译器(Compiler)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) ?   一般由程式员分配释放, 若程式员不释放,程式结束时可能由OS回收 。注意他和数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)?,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程式结束后有系统释放
4、文字常量区  ? 常量字符串就是放在这里的。 程式结束后由系统释放
5、程式代码区? 存放函数体的二进制代码。

二、例子程式
这是个前辈写的,非常周详
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将他和p3所指向的"123456"优化成一个地方。
}

二、堆和栈的理论知识
2.1申请方式
stack:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap:
需要程式员自己申请,并指明大小,在c中malloc函数
如p1 = (char *)malloc(10);
在C++中用new运算符
如p2 = (char *)malloc(10);
不过注意p1、p2本身是在栈中的。

2.2 申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程式提供内存,否则将报异常提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程式的申请时,
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程式,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

2.3申请大小的限制
栈:在视窗系统下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

2.4申请效率的比较:
栈由系统自动分配,速度较快。但程式员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.
另外,在WINDOWS下,最佳的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。不过速度快,也最灵活。

2.5堆和栈中的存储内容
栈: 在函数调用时,(1) 第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,(2) 然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,(3) 然后是函数中的局部变量。 注意: 静态变量是不入栈的。
当本次函数调用结束后,(1) 局部变量先出栈,(2) 然后是参数,(3) 最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程式由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程式员安排。

2.6存取效率的比较
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在运行时刻赋值的;
而bbbbbbbbbbb是在编译时就确定的;
不过,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。
比如:
#include
void main()
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
对应的汇编代码
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。

2.7小结:
堆和栈的差别能用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,不过自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,不过比较符合自己的口味,而且自由度大。

深度优先搜索和广度优先搜索算法有何差别呢?
  通常深度优先搜索法不全部保留结点,扩展完的结点从数据库中弹出删去,这样,一般在数据库中存储的结点数就是深度值,因此他占用空间较少。所以,当搜索树的结点较多,用其他方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。
  广度优先搜索算法,一般需存储产生的所有结点,占用的存储空间要比深度优先搜索大得多,因此,程式设计中,必须考虑溢出和节省内存空间的问题。但广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索要快些

void main(void)
{
  int nArrLength(400), i = 546;         // 主要是考看对C++的基础知识是否了解
  // 这里的int nArrLength(400)是对整数的定义,当然,明名上有问题,这里是故意这样的
  // 但是,最好是变量名改为 ....[还是您自己看着办了]

for (int i = 0; i< 99999999999; i++); // 这里是考对变量越界理解,同时....,
  // 所以,999...应该改为 ~((int)0),也就是整数中0取反
  // 考对变量块作用域的理解,这里的i,在循环后就不存在了

cout << nArrLength << endl;           // 这里输出 400
  cout << i << endl;                    // 这里输出 546  
}
以上代码如果有错,请该正,并写出输出结果?

int i = 5, b = 7;
cout << (i+++b) <<endl;
不用调试,请说出,以上代码
在VC中和BCB中的输出结果??
VC  :12
BCB :13

--------------------------------------------------------------------------------

写一个能做左值的函数(方法有很多)
  如:max(x, y) += 2874 + 55;
      drwline(x, y)++;
  答案:
  int &max(int & x, int & y)
  {
     return x > y? x : y;
  }
  int x = 55, y = 77;
  max(x, y) += 12 + 11; // 此时 y = 92;
  cout << "x = "x << "; y = "<< y << endl; // 输出 x = 55; y = 92;

int strcmp(char *s,char *t)
{
while(*s && *t && _______ ) // *s == *t
{
s++;
t++;
}
 
return (______)             // *s - *t
}

.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。

2.写一个函数,将其中的/t都转换成4个空格。

3.Windows程序的入口是哪里?写出Windows消息机制的流程。

4.如何定义和实现一个类的成员函数为回调函数?

5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。

6.C++里面如何声明const void f(void)函数为C程序中的库函数?

7.下列哪两个是等同的

int b;

A const int* a = &b;

B const* int a = &b;

C const int* const a = &b;

D int const* const a = &b;

8.内联函数在编译时是否做参数类型检查?

void g(base & b){

b.play;

}

void main(){

son s;

g(s);

return;

}

1,程序设计(可以用自然语言来描述,不编程):C/C++源代码中,检查花括弧(是"("与
")","{"与"}")是否匹配,若不匹配,则输出不匹配花括弧所在的行与列。

2,巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数,且
首尾两数字之和也为一个素数。编程打印出所有的排法。

3,打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为"X",第二层为"Y",从第三层起每层依次打印数字0,1,2,3,...
例子:当N =5,打印出下面的图形:
 X X X X X
 X Y Y Y X
 X Y 0 Y X
 X Y Y Y X
 X X X X X

1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。
  2.请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?
  3.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?
  4.请问C++的类和C里面的struct有什么区别?
  5.请讲一讲析构函数和虚函数的用法和作用。
  6.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
  7.8086是多少位的系统?在数据总线上是怎么实现的?
  
联想笔试题

  1.设计函数 int atoi(char *s)。
  2.int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少?
  3.解释局部变量、全局变量和静态变量的含义。
  4.解释堆和栈的区别。
  5.论述含参数的宏与函数的优缺点。
c++最后几个大题目是
1,实现双向链表删除一个节点P,在节点P后插入一个节点,这两个函数。
2,写一个函数将其中的/t都转换成4个空格。
3,windows程序的入口是哪里?写出windows消息机制的流程。
4,如何定义和实现一个类的成员函数为回调函数。

还有前面的几个:
1. class A{
int a;
int b;
}
问的是编译时的default constructor function的问题。
还有一个说,A有其他自己定义的构造函数,问是否还有default constructor function
还是什么来着,记不清乐。
2. c++里面是不是所有的动作都是main()引起的?如果不是,请举例。
3. c++里面如何声明const void f(void)函数为C库函数?(这个我前几天还看来着,
居然就忘记乐, )

对了,还考乐一些关于const的问题
问下列哪两个是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;

还有一个是考类的成员函数是 void f() const;型的时候调用的问题。

幸好昨天刚刚看乐这部分的内容,呵呵

内联函数考了一题,问内联函数在编译时是否做参数类型检查。

虚函数也考了一题,不过不难。
class base{
public:
virtual void play(){
cout<<"base";
}
}
class son: public base{
public:
void play(){cout<<"son";}
}
void g(base & b){
b.play;
}

void main(){
son s;
g(s);
return;
}

我所收集的intel比试题&面试题:

(熟悉大公司的题目,并不仅仅是为了进这些公司,而是很多国内公司考察内容都很接近而已.)

2005笔试 :

1。高效的内存管理
2。8皇后问题
面试q:
(2) 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?设计时候如何具体的实现。

(3) OS相关的问题,内存访问,cache等(包括cache在整个系统中的位置,画出来,并解释)

(4) 解释例如mov ax,100H 这样一条指令的cpu, os, memory等都完成了什么样的工作。

(5) Strlen()的C语言实现,不能使用任何变量。

(6) 编译中display表的一些问题

(7) 一个hash函数,输入随机,现发生冲突,如数据集中在某几条中,问怎样处理hash函数保证高效的访问,怎样实现?

(8) 把Switch()case…语句翻译成三元组。

(9) 一个byte(用C语言实现计数其中1的个数),给出最高效的实现方法。(位域)或者查表最快的;

(10) 上海有多少个加油站?你是怎样解决这一问题?

(11) C语言参数的入栈顺序?为什么这么实现?

(12) 你的最大的优点和缺点分别是什么?

(13) C语言中字符串的翻转,最高效率(时间和空间)的实现?

2004

1. 三个float:a,b,c 问值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b

2. 把一个链表反向填空

3. 设计一个重采样系统,说明如何anti-alias

4. y1(n)=x(2n), y2(n)=x(n/2),问:
如果y1为周期函数,那么x是否为周期函数
如果x为周期函数,那么y1是否为周期函数
如果y2为周期函数,那么x是否为周期函数
如果x为周期函数,那么y2是否为周期函数

5. 如果模拟信号的带宽为5KHZ,要用8K的采样率,怎么办。

4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统

(300M的CPU,50M的SDRAM)中运行,还需要优化吗?

5. x^4+a*x^3+x^2+c*x+d最少需要作几次乘法

6. 什么情况下,sin(x+y)+y ~ ....

7. 下面哪种排序法对12354最快
a quick sort
b.buble sort
c.merge sort

8. 哪种结构,平均来讲,获取一个值最快
a. binary tree
b. hash table
c. stack

1。 pipeline
2。 程序流程图题目
3。 哲学家进餐
4。 32bit,64bit,两个平台上complier,linker,os kernel,library,debuger的性质
5。 const char * vs char const * (?)
6。 GDT and LDT
7。 1+1<<1
8。 Stack性质
9。 ???
10。正方体中压力什么的。。。

大题
1。f[40,400],log10变换
2。ACPI
3。读程序
4。频谱,采样分析

大题
1。写出下列信号的奈亏斯特频率
(1)f(t)=1+cos(2000pait)+sin(4000pait)
(2)f(t)=sin(4000pait)/pait
(3)f(t)=(sin(4000pait)的平方)/pait
2.填程序
把一个计算m^n的程序填充完整
大概的意思是:
有一个全局数组char s[BUFSIZE]
利用这个数组计算,就是每个单元存放计算结果的一位,index小的存放低位,index大
的存放高位
3。有两个线程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
(1)有没有其他方法可以提高程序的性能
(2)可不可以不使用信号之类的机制来实现上述的功能
4。优化下面的程序
(0)sum=0
(1)I=1
(2)T1=4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(10)IF I<20 GOTO (2)

1。关于c的main函数
2。15个人循环报数,报到N的出列,找出最后留下的那个人,算法填空题
2。找出一个给出的并行解决方案的错误情况
3。关于GPIO,intel的四种体系结构

选择题10题
有关vc和c,指针,HyporThreading Dual-core等等
看也看不懂的

2003年的

1:概率题。x,y为随机变量,联合概率密度 f(x,y) = intig(0,1)*dx*intig(0,x)*k*d
y,k为常数,求k=? E(xy)=?
注:intig(a,b)为a到b的定积分。

2:概率题。A,B为随机事件,以下哪个正确
A. P(A U B)*p(AB) <= P(A)P(B)
B. P(A U B)*p(AB) >= P(A)P(B)
C. P(A U B)*p(AB) <= P(A) + P(B)
D. P(A U B)*p(AB) >= P(A) + P(B)

3: 信道带宽200kHz,信噪比10dB,求信道波特率=?

4:以下代码运行结果是什么
int main()
{
int a,b,c,abc = 0;
a=b=c=40;
if(c)
{
int abc;
abc = a*b+c;
}
printf("%d,%d", abc, c);
return 0;
}

5:给出了从纽约出发和到达落山鸡的各种航班信息,写出找到一条从纽约到落山鸡的最
短距离的航班组合的代码。

6:从计算机图形上截取某个物体边缘的若干个坐标,求这个物体面积,并跟判断是方形
还是圆形,为啥。(坐标不记得,大概是个圆
)。

7:离散卷机与DFT的区别与关系。快速求不满足2^N长度的离散傅立叶变换的方法有哪些
?如何用fft求N*M点的离散卷机?

8:给出fir和iir的优缺点。

9:如何计算线性标量量化器的量化噪声?需要那些假设?

1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?

2005年腾讯招聘
选择题(60)
  c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个!
程序填空(40)
1.(20) 4空x5
  不使用额外空间,将 A,B两链表的元素交叉归并
2.(20) 4空x5
MFC  将树序列化 转存在数组或 链表中!

1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

// 这样转向定义应该不算违规吧!^_^

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

}

jruv   (~~~一叶落而知天下秋~~~) 的答案:

#define   COMPARE(a,b)   ((a)-(b))         //<0:   a<b   =0:a==b>0:a>b

2.如何输出源文件的标题和目前执行行的行数

cout   <<   "Filename   "   <<   __FILE__   <<   "   Line   "   <<   __LINE__   <<   endl;

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

算法提示:

输入 string a, string b; 计算string c=a*b; 返回 c;

1,    纪录小数点在a,b中的位置l1,l2, 则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;

2,    去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)

3,    计算c=a*b; (同整数的大数相乘算法)

4,    输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)

du51(郁郁思扬)的答案:

变为整数求就行了.输入的时候记一下,小数点位置..输出再做点文章就行了.
下面的是大整数的运算.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
   int data;
   Node *next;
};
void output(Node *head)
{
   if(!head->next&&!head->data)return;
   output(head->next);
   cout<<head->data;
}
void Mul(char *a,char *b,int pos)        
{
   char *ap=a,*bp=b;
   Node *head=0;
   head=new Node;head->data=0,head->next=0;   //头
   Node *p,*q=head,*p1;
   int temp=0,temp1,bbit;
   while(*bp)                //若乘数不为空 ,继续.
   {
       p=q->next;p1=q;
       bbit=*bp-48;          //把当前位转为整型
       while(*ap||temp)            //若被乘数不空,继续
       {
           if(!p)            //若要操作的结点为空,申请之
           {
               p=new Node;
               p->data=0;
               p->next=0;
               p1->next=p;
           }
           if(*ap==0)temp1=temp;
           else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
           p1->data=temp1%10;    //留当前位
           temp=temp1/10;    //进位以int的形式留下.
           p1=p;p=p->next;                 //被乘数到下一位
       }
       ap=a;bp++;q=q->next;                //q进下一位
   }
   p=head;
   output(p);                   //显示
   cout<<endl;
   while(head)                 //释放空间
   {
           p=head->next;
           delete head;
           head=p;
   }
}
int main()
{
   cout<<"请输入两个数"<<endl;
   char test1[MAX],test2[MAX];
   cin.getline(test1,MAX,'/n');
   cin.getline(test2,MAX,'/n');
   Mul(strrev(test1),strrev(test2));
   system("PAUSE");
   return 0;
}
上面大整数已经写了.你加几个东西就行了.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
   int data;
   Node *next;
};
void output(Node *head,int pos)
{
   if(!head->next&&!head->data)return;
   output(head->next,pos-1);
   cout<<head->data;
   if(!pos)cout<<".";
}
void Mul(char *a,char *b,int pos)        
{
   char *ap=a,*bp=b;
   Node *head=0;
   head=new Node;head->data=0,head->next=0;   //头
   Node *p,*q=head,*p1;
   int temp=0,temp1,bbit;
   while(*bp)                //若乘数不为空 ,继续.
   {
       p=q->next;p1=q;
       bbit=*bp-48;          //把当前位转为整型
       while(*ap||temp)            //若被乘数不空,继续
       {
           if(!p)            //若要操作的结点为空,申请之
           {
               p=new Node;
               p->data=0;
               p->next=0;
               p1->next=p;
           }
           if(*ap==0)temp1=temp;
           else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
           p1->data=temp1%10;    //留当前位
           temp=temp1/10;    //进位以int的形式留下.
           p1=p;p=p->next;                 //被乘数到下一位
       }
       ap=a;bp++;q=q->next;                //q进下一位
   }
   p=head;
   output(p,pos);                   //显示
   cout<<endl;
   while(head)                 //释放空间
   {
           p=head->next;
           delete head;
           head=p;
   }
}
int main()
{
   cout<<"请输入两个数"<<endl;
   char test1[MAX],test2[MAX],*p;
   int pos=0;
   cin.getline(test1,MAX,'/n');
   cin.getline(test2,MAX,'/n');
   if(p=strchr(test1,'.'))
   {
       pos+=strlen(test1)-(p-test1)-1;
       do
       {
           p++;
           *(p-1)=*p;
       }while(*p);
   }       
   if(p=strchr(test2,'.'))
   {
       pos+=strlen(test2)-(p-test2)-1;
       do
       {
           p++;
           *(p-1)=*p;
       }while(*p);
   }   
   Mul(strrev(test1),strrev(test2),pos);
   system("PAUSE");
   return 0;
}

4.写一个病毒

cout<<"一个病毒"<<endl;

(开玩笑的,没搞过,^_^)

5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。

//本算法使用快排,O(n*lg(n))

//最低可以找到线性算法,使用预先区域统计划分!类试于构造Quad Trees! 写起来代码会长些!

#include <stdio.h>

#include <stdlib.h>

#define Max 100000000

int a[Max+10];

int cmp( const void *a, const void *b)

{

int *x = ( int *) a;

int *y = ( int *) b;

return *x-*y;

}

int main()

{

int n=0;

while (scanf("%d",&a[n])==1)     n++;

qsort(a,n,4,cmp);

for ( int i=0;i<3;i++)     printf("%d",a[ i ]);

return 1;

}

5 、有 A 、 B 、 C 、 D 四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时 1 、 2 、 5 、 10 分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在 17 分钟内这四个人都过桥?

Solution:关键是时间最长的两个人必须同时过桥

The First Time :       A(1) 和 B(2) 过桥, A(1) 返回 Cost : 1+2
The Second Time :    C(5) 和 D(10) 过桥, B(2) 返回 Cost : 10+2
The Third Time     A(1) 和 B(2) 过桥 Cost : 2

Total Time Cost :    (1+2)+(10+2)+2=17 minutes
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句  
  2.如何输出源文件的标题和目前执行行的行数  
  3.两个数相乘,小数点后位数没有限制,请写一个高精度算法  
  4.写一个病毒

C++ 基础概念(二)相关推荐

  1. C#基础概念二十五问[转]

    注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除! 当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了.这两天又全面的看了一下相关的基础知识(学而时习 ...

  2. C#基础概念二十五问

    注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除! 当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了.这两天又全面的看了一下相关的基础知识(学而时习 ...

  3. C#基础概念二十五问 【二】 [转]

    11.可以使用抽象函数重写基类中的虚函数吗? 答: 可以 需使用 new 修饰符显式声明,表示隐藏了基类中该函数的实现 或增加 override 修饰符,表示抽象重写了基类中该函数的实现 示例: cl ...

  4. C#面向对象 基础概念二十五个 (很基础,必须掌握的知识)

    1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用 ...

  5. 密码学基础概念(二)

    1.1密码学的基本概念 1.什么是密码学 密码学是保密学的一部分.保密学是研究密码系统或通信安全的科学,它实际上包含两个分支--密码学和密码分析学.密码学是对信息进行编码实现隐蔽信息的一门科学:而密码 ...

  6. C语言详解文件操作(一):文件操作基础概念、按照字符、按照行块、按照格式化和随机位置读写文件

    文章目录 一.文件操作基础概念 二.文件读写:按照字符方式读写 三.文件读写:按行和块读写 四.文件读写:格式化和随机位置 一.文件操作基础概念 C语言中的文件操作的好处:       一个文件通常是 ...

  7. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  8. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. 区块链教程(二):基础概念介绍

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 本系列重点在于以太坊基础知识.以太坊客户端以及以太坊solidity编程,因此博客重点在于以太坊核心知识点的掌握,区块链部分的基础知识可以作为补充 ...

最新文章

  1. 基于css3 transform实现散乱的照片排列
  2. 微软,您的.net为中国程序员带来了什么?
  3. python conrurrent
  4. 2013应届毕业生“京北方”校招应聘总结
  5. 关于c#中 的动态加载程序集
  6. mysql 布尔型盲注,SQL注入之布尔型注入(MySQL)
  7. Tomcat7.0+的JNDI问题
  8. 双厨狂喜!海盗船机械键盘联名石之海,一起欧拉欧拉!
  9. 小程序 | 如何清除手机上小程序缓存
  10. case when的几种用法
  11. VPS搭建zotero自动同步的webdav服务
  12. POWERSHELL脚本编写利器:PowerGUI Visual Studio Extension
  13. Mybatis时区问题
  14. 问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...
  15. 华为新员工入职180天详细培训计划
  16. 【机器学习】【线性代数】正交基、标准正交基、正交矩阵,正交变换等数学知识点
  17. 2009.5.9 GYMUN
  18. 字体大宝库:50款精美的免费细英文字体资源【上篇】
  19. 该不该抛弃那匹马呢?
  20. solor与MySQL怎么同步_solr 索引库同步数据库

热门文章

  1. 一篇流水账,纪念金庸大侠
  2. emc整改措施及案例_EMC整改方案
  3. 游戏中常用音乐风格分析
  4. 一本超越期待的 C++ 书——简评《Boost程序库完全开发指南:深入C++“准”标准库》
  5. 【排序】折半插入排序
  6. unity材质球发光_Unity利用材质自发光实现物体闪烁
  7. netfilter编程实例——一个简单的防火墙
  8. 如何解决Maven依赖冲突
  9. 2020年中国热成像品牌崛起,高德红外跃居全球第二
  10. Elasticsearch——Settings设置