智乐北京c/c++工程师笔试

2010-02-25 | 智乐软件(北京)C\C++笔试题 2月25日 一、写一个函数找一个字符串中出现频率最高的字符(若最高的相同,取先出现的)

二、写一个函数,将一个32位RGB像素的色值转为灰度,RGB转灰度的公式:Grey=.03*red+0.59*green+0.11*blue;RGB像素格式(左边最高位,右边最低位):00000000RRRRRRRRGGGGGGGGBBBBBBBB.

unsigned int ToGrey(unsigned int rgb)

{ 请填 }

三、#define SQR(x)(x*x)

inline int sqr(const int x){return (x*x);}

在什么情况下执行结果不同?

四、这个函数的作用,指出其中有关函数参数类型的一个问题。

void foo(char*s,char*t)

{

while(*s++=*t++);

}

五、名词理解

placement new、ARM、GCC、Android 、singleton。

六、翻译

①关于多态;②关键词是:游戏、像素、帧频。

七、写出e的值

1.int e=(-1)&12345;

2.int e=0x4321>>4<<4;

3.char*mystr="";int e=sizeof(mystr);

4.int*a[6][3]; int e=a[5]-a[2];

5.int a=1,b=2;int*p1=&a,*p2=&b;p1=p2;int e=a;

6.int func(int i)

{

return i<10?i:func(i/10)+i%10;

}

int e=func(123456);

char func(const char* s)
{
if(!s) //凡是字符串的操作,先判空
return NULL;
if(!*s) //再判首字符
reurn NULL;

//接下来才是主要代码。上面两步没有,考官直接将你pass
char ch,*p=s; //定义标记字符ch、和外层循环指针*p
int max=0; //定义最大次数标记
while(*p++)
{
int count=1; //每次统计时,初值为1
char* cmp;
for(cmp=s;cmp!=p;cmp++) //统计从首字符到当前字符之间出现的当前字符个数
if(*cmp==*p)
count++;
if(count>max) //超过max则更新ch
ch=*p;
}
return ch;
}
//算法思想:将当前字符*p与之前出现的所有字符比较,统计出现次数count。若超过之前统计的最大次数,则更新标记的字符ch为当前字符
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-26
只做了第一题,一个字母a-z字符的,太麻烦了。
#include "stdlib.h"
#include "stdio.h"

char str(char *s)
{
char *p;
int i[26]={0},j;
char m;
int n=0;
char c;
p=s;
while (*p!=0)
{
if((*p>='a')&& (*p<='z'))
{
switch (*p)
{
case 'a': i[0]++; break;
case 'b': i[1]++;break;
case 'c': i[2]++;break;
case 'd': i[3]++;break;
case 'e': i[4]++;break;
case 'f': i[5]++;break;
case 'g': i[6]++;break;
case 'h': i[7]++;break;
case 'i': i[8]++;break;
case 'j': i[9]++;break;
case 'k': i[10]++;break;
case 'l': i[11]++;break;
case 'm': i[12]++;break;
case 'n': i[13]++;break;
case 'o': i[14]++;break;
case 'p': i[15]++;break;
case 'q': i[16]++;break;
case 'r': i[17]++;break;
case 's': i[18]++;break;
case 't': i[19]++;break;
case 'u': i[20]++;break;
case 'v': i[21]++;break;
case 'w': i[22]++;break;
case 'x': i[23]++;break;
case 'y': i[24]++;break;
case 'z': i[25]++;break;

}
}
*p++;
}
for(j=0;j<26;j++)
{
if (i[j]>n)
{
n=i[j];
c='a'+j;
}

}
return c;
}

main()
{
char *a="aaabbbbcccccaa";
char c;
c=str(a);
printf("%c",c);

}
相似回答