百度笔试之1KB内存,1MHz处理器 运行最长时间 maxContinuNum

问题一:如果你有一台迷你电脑,有1KB内存,1MHz处理器(每秒可处理10 ^6次状态改变)。求能够在这上运行且确定性终止的所有程序中,最长运行时间可能是多少?给出思路及推理过程(可以做任何假设)。

 

1KB内存 ≈1000Byte ≈ 8000bit 一共有2^8000个可能状态

 

所以答案为:2^8000/10^6

 

 

问题二:int maxContinuNum(const char *inputstr,char *outputstr)

功能:在以'/0'结尾的字符串中找出连续最大的数字串,并返回其长度,把这个最长数字串赋给其中一个函数参数outputstr所指的内存。如调用maxnumstr("123abc1234a", outputstr)后返回4outputstr中为"1234"

要求:不能使用系统函数或标准库提供的函数,如strlen之类的库函数。

 

 

解决方法:

int maxContinuNum(const char* inputstr, char *outputstr)

{

    int count1,count2;

    char frontchar;

    char *tempstr1,*tempstr3;

    char* tempstr2 = new char[200];

    char* destr;

    destr = tempstr2;

    //strcpy(tempstr2,inputstr);

    if(outputstr!=NULL)

    {

       while((*tempstr2++ = *inputstr++)!='/0');

       tempstr2 = destr;

 

    }

 

 

    count1 = 0;

    count2 = 0;

    if(*tempstr2 == '/0')

       return 0;

    frontchar = *tempstr2;

    if(frontchar>='0'&&frontchar<='9')

    {

       count2 = 1;

       tempstr1 = tempstr2;

       outputstr = tempstr1;

    }

    tempstr2++;

    while(*tempstr2 != '/0')

    {

       if(*tempstr2>='0'&&*tempstr2<='9'&& 1==(*tempstr2-frontchar))

       {

           count2++;    

 

       }

       else if(*tempstr2>='0'&&*tempstr2<='9')

       {

           if(count2>count1)

           {

              count1 = count2;

              outputstr = tempstr1;

           }

              count2 = 1;

              tempstr1 = tempstr2;       

       }     

       else

       {

           if(count2>count1)

           {

              count1 = count2;

              outputstr = tempstr1;

           }

           count2 = 0;  

        }

       frontchar = *tempstr2;

       tempstr2++;

    }

    if(count2>count1)

    {

       count1 = count2;

       outputstr = tempstr1;

    }

    tempstr3 = outputstr;

    for(int i=0; i<count1;i++)

    {

       tempstr3++;

    }

    *tempstr3 = '/0';

    return count1;

}

 

 

这道题最初看似考察指针 字符串的一些问题 但是其中另藏玄机 

const char *转换为 char*才是最容易被忽视的难点 一般而言 需要使用strcpy这个系统函数 但是由于题目限制 所以需要另外写一个strcpy函数 其他的难度就不是很大 

你可能感兴趣的:(百度笔试之1KB内存,1MHz处理器 运行最长时间 maxContinuNum)