百度笔试2011

来源:互联网 发布:手机视频网站完整源码 编辑:程序博客网 时间:2024/05/03 20:30
第一题(30分)

1.定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,push和pop的时间复杂度都是O(1),请简要叙述你的思想

#include "stdafx.h"#include "stdio.h"#define MAX_SIZE 100class Stack{private:    int data[MAX_SIZE ];    int minData[MAX_SIZE ];    int pos;public:    Stack(){pos = 0;}    bool Push(int value){        if(pos < MAX_SIZE){            if(pos == 0){                minData[pos] = value;            }else{                if(value < minData[pos - 1]){                    minData[pos] = value;                }else{                    minData[pos] = minData[pos - 1];                 }            }            data[pos] = value;            pos++;            return true;        }        return false;    }    int Pop(){        return data[--pos];    }    int min(){        return minData[pos - 1];    }};int main(int argc, char* argv[]){    Stack stack;    int a[] = {3,1,2,5,3,9,-1,-2,5,-9,-11};    int size = sizeof(a)/sizeof(int);    for(int i = 0 ; i<size;i++){        stack.Push(a[i]);        printf("%d " , stack.min());    }    printf("\n");    for(i = 0 ; i<size;i++){        printf("%d " , stack.min());        stack.Pop();    }    return 0;}


2. 阅读下面代码,说明输出的含义并挑错
问题1:写出下列代码的运行结果的前7行,并说明程序的含义
问题2:代码中是否有不安全隐患?原因是?
#include  
#include  
 
const int MAX_LEN = 128;
const int MAX_LINE = 20;
int main(int argc, char* argv[])
{
  char str[MAX_LEN] = "1";
  char tmp_str[MAX_LEN] = "";
  char buf[MAX_LEN] = "";
  printf("%s\n",str);
[size=3] for (int line = 1; line {
  strcpy(tmp_str,str);
  str[0] = '\0';
  for (int i=0;tmp_str!=0; ++i)
  {
  char ch = tmp_str;
  int count = 1;
  for (;tmp_str[i+1]==tmp_str; ++i)
  {
  ++count;
  }
  sprintf(buf,"%d%c",count,ch);
  strcat(str,buf);
  }
  printf("%s\n",str);
  }
  return 0;
}
3.分别采用线性表,二叉平衡树,哈希表存储数据,请分析它们的优劣
第二题 算法与程序设计(40分)
1 一串首尾相连的珠子,总共m颗,每颗珠子都有自己的颜色,全部颜色有n种(n小于10)设计算法从中找到最短的珠串包含所有颜色的珠子。
#include<stdio.h>#define        COLORTYPE    5int countcolor[COLORTYPE] = { 0 };int balls[]  = { 0, 1, 2, 3, 2, 1, 3, 3, 4};int main(){    int size = sizeof(balls) / sizeof(int);        int count = 0;    int min = size + 1;    int start = 0;    int end = 0;    while(end < size)    {                if(count < COLORTYPE)        {            if( countcolor[balls[end]]++ == 0)            {                count++;            }            end++;            }        while( COLORTYPE == count)        {            if( end - start < min)            {                min = end - start;            }            if( --countcolor[balls[start]] == 0)            {                count--;            }            start++;        }        if(COLORTYPE == min)        {            break;        }    }     if(min == size + 1)     {        printf("can not find such string\n");     }     else     {         printf("minimize string length is %d\n", min);     }     return 0;}


2. 设计一个strmncmp函数,对比普通的strcmp,原则在于,当字符串中含有数字时,以数字大小为标准,对于其中只有一个字符串为数字的情况,仍然使用原来的原则,要求:请给出完整代码,在达到目标的情况下尽量搞笑,简洁。(20分)
原创粉丝点击