|
|
发表于 2004-12-12 05:35:00
|
显示全部楼层
Re:转:某game公司面试题一份
做完了, 哪位老师来改下
1.答: 相当于用10位2进制数表示1000以内的数, 盒子里面放1,2,4,8,16,32,64,128,256,489
2.g_valueList.AddTail只是把内存地址存入CList, 一旦CArray超出upper_bound进行realloc后, 所有元素的地址就会改变, CList中的指针就变成了所谓"野指针"
3.可以用空间换时间, 或者时间换空间
#include <stdio.h>
#include <time.h>
#define N 10
#define MIN_NUM 0
#define MAX_NUM 99
int main(void) {
int i;
int rand_array[N];
int rand_flag[MAX_NUM-MIN_NUM+1];
if (N>MAX_NUM-MIN_NUM+1) {
printf("Error!\n");
return 0;
}
srand((unsigned)time(NULL));
for (i=0; i<MAX_NUM-MIN_NUM+1; i++) rand_flag = 0;
for (i=0; i<N; i++) {
rand_array = MIN_NUM+(rand()%(MAX_NUM-MIN_NUM+1));
while (rand_flag[rand_array-MIN_NUM]==1)
rand_array = (rand_array+1)>MAX_NUM?MIN_NUM rand_array+1);
rand_flag[rand_array-MIN_NUM] = 1;
printf("%d ", rand_array);
}
printf("\n");
return 0;
}
4.'\0'也算一个字符
#include <stdio.h>
#include <malloc.h>
int ChangeToTail(char *pSZ, int nSize)
{
// Todo:请在此加入您的代码
int i,j=0,count=0,first=-1;
char *buf;
buf = calloc(nSize,1);
for (i=0; i<nSize; i++) {
if (pSZ!='#') {
buf[j] = pSZ;
j++;
} else {
if (first==-1) first = i;
count++;
buf[nSize-count] = '#';
}
}
memcpy(pSZ, buf, nSize);
free(buf);
return first;
}
int main(void) {
int i;
char buf[] = "WWWW#W#W";
int size = 8;
printf("first buf[%d]='#' \n", ChangeToTail(buf, size));
for (i=0; i<size; i++) {
printf("%02X ", buf);
}
printf("\n");
return 0;
}
5.
CCelsius* pCelsius = (CCelsius*)pTemperature; // 子类对象指针强制转换成父类对象指针
CFahrenheit* pFahrenheit = (CFahrenheit*)pCelsius; // 不同对象指针强制转换
6.
(1).编译不通过, 无法运行, 缺少using namespace std;
(2).基类析构函数加virtual
(3).设计目的:实现多态, 设计意义:对于Open操作的不同响应方式
(4).auto_ptr<Base> pBase = auto_ptr<Base>(::CreateInstance()); pBase->Open(); |
|