xiong 的个人资料共享空间标题照片日志列表 工具 帮助
5月30日

面试题目

MSN CDC笔试中有一个这样的题目:

把一个整形转换成字符串。

 

有vc的情况下用了15分钟才调试正确。笔试的时候估计要25分钟以上。

 

曾经去ATC面试的时候,有一个题目:

把字符串buffer里面连续的空格变成一个空格, 比如有aa   bb cc d变成aa bb cc d.

 

今天重新用vc调了一下,一个小时左右吧。而当时面试一共就一个小时,这个题目不过是其中之一。

 

 

答案分别如下:

void cvt(int i)
{
 int input=i;
 int iterator=2;
 while(input)
 {
  int i=input%iterator;
  val[stack++]=i;
  input/=iterator;
 }
}

void wrapper(int i)
{
 if(i==0)
 {
  printf("0");
  return;
 }
 if(i>0)
 {
  cvt(i);
 }
 if(i<0)
 {
  cvt(-i);
  printf("-");
 }
 while(stack>0)
 {
  printf("%d",val[--stack]);
 }
 
}

 

 

 

 

==========

 

void mov()
{
 char *p="     aa  bb    ccd e  f g     h j   ";
 char q[100];
 strcpy(q,p);
 int index=0;
 int flag=0;
 int beg[100];
 int len[100];
 int top=0;
 int lentmp;
 while(q[index]!='\0')
 {
  if(q[index]==' ')
  {
   if(flag==1)
   {
    beg[top]=index;
    lentmp=0;
    flag=2;
   }
   if(flag==2)
   {
    lentmp++;
   }
   if(flag==0)
   {
    flag=1;
   }
  }
  else
  {
   if(flag==2)
   {
    len[top++]=lentmp;
   }
   flag=0;
  }
  index++;
 }

 if(flag==2)
 {
  flag=1;
  len[top++]=lentmp;
 }

 flag=0;
 beg[top]=index+1;
 len[top++]=0;
 flag=0;

 int lastcopy=0;
 int begcopy;
 for(int i=0;i<top-1;i++)
 {
  begcopy=beg[i]-lastcopy;//+len[i]+2;
  int startpoint=beg[i]+len[i]; 
  int lencopy=beg[i+1]-len[i]-beg[i]-1;

  for(int lentmp=0;lentmp<lencopy;lentmp++)
  {
   q[begcopy++]=q[startpoint++];
  }
  q[begcopy]=' ';
  lastcopy+=len[i];
 }
 q[begcopy]='\0';
 lastcopy=0;

}

评论 (9)

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

虫子发表:
呵呵,sorry,最后三句应该是
 list[prefix] = '\0';
 list = TrimSize(list, prefix + 1);
 return list;
4 月 8 日
虫子发表:
大概看了一下那个移除多于空格的题目,不知道是不是我对题目的意思理解错了?
由于对C的语法忘的差不多了,于是用了下面这段伪代码描述一下算法,请指教。
 
char[] StrimSpace(char[] input)
{
 char[] list = new char[input.length];
 bool isLastCharSpace = false;
 int prefix = 0;
 for(int index = 0; index < input.length; index ++)
 {
   char c = input[index];
   bool isCharSpace = IsCharSpace(c);
   if(!IsCharSpace || !isLastCharSpace)
   {
     list[prefix] = c;
     prefix ++;
   }
   isLastCharSpace = isCharSpace;
 }
 list[index] = '\0';
 list = TrimSize(list, index + 1);
 return list;
}
bool IsCharSpace(char input)
{
 return input == ' ';
}
4 月 8 日
1 月 17 日
匿名 的图片
William Huang 发表:
msn笔试题,
上面说明了正确性是第一要求。
然后错误处理和边界状况考虑是第二要求。

估计编程风格也是要看的。
我习惯把
if(flag==2)
写成 if(2==flag)
这样万一写错了,编译器会报错。
不知道微软喜不喜欢这样。
6 月 2 日
匿名 的图片
William Huang 发表:
iterator用得好。
stack名字取得好。

赞一个。
6 月 2 日
匿名 的图片
putaoefu 发表:
修改iterator=10就可以了

不过iterator=2的时候不支持负数补码
5 月 30 日
匿名 的图片
Analyst_Qiao 发表:
整数转字符串的代码以前高中搞竞赛的时候才写过一次。你这个程序怎么是转换成二进制?
5 月 30 日
匿名 的图片
putaoefu 发表:
道理上说思路对就可以。

但是如果100个人面试,99个思路对,剩下的一个写的代码对,肯定是100跟都符合要求,不过只要代码对的那个
5 月 30 日
匿名 的图片
pt 发表:
笔试的时候应该不会要求直接写出调试都不出错的程序吧?思路对了估计就差不多了
5 月 30 日

引用通告

此日志的引用通告 URL 是:
http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!159.trak
引用此项的网络日志