问题一:如果你有一台迷你电脑,有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)后返回4且outputstr中为"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函数 其他的难度就不是很大