免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: moonwhite999
打印 上一主题 下一主题

两道嵌入式面试题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2010-03-21 14:58 |只看该作者
当条件与i相关,就用第一个。否则用第二个。

论坛徽章:
0
32 [报告]
发表于 2010-03-21 15:07 |只看该作者
想抄就抄下来吧,也没什么.
你想,连++,--的问题都可以上大学生的教材乃至试卷,还有什么不可能的?
说不定 ...
cjaizss 发表于 2010-03-19 23:26


仰望高人

论坛徽章:
0
33 [报告]
发表于 2010-03-21 21:31 |只看该作者
第二道题贴上我的程序吧,已调试通过的,我知道在大牛眼里不屑一顾,但我刚工作时得到很多不认识的人的帮助,现在还常怀感激,我也深知对一些人很简单的问题,在另一些人那里则很困难,因为我也是从那个阶段过来的。
#include <stdio.h>
#include <string.h>

int nCharHash[26];

int FindOnceChar( char *strsrc,char &c,int &ipos)
{
        int nLen = strlen(strsrc);
        int i;
        for ( i = 0;i < nLen;i++)
        {
                nCharHash[strsrc[i]-'a']++;
        }
        for ( i = 0;i < nLen;i++)
        {
                if ( 1 == nCharHash[strsrc[i]-'a'] )
                {
                        c = strsrc[i];
                        ipos = i;
                        break;
                }
        }
        if ( i == nLen)
        {
                return -1;
        }
    return  0;
}

int main()
{
        char *testchar = "abcdabce";
        char c;
        int nPos;
        int nRet;
        nRet = FindOnceChar(testchar,c,nPos);
        if ( 0 == nRet )
        {
                printf( "The char Which placed only once is %c,the position is %d\n",c,nPos);
        }
        return 0;

}

第一道题大家不必再费脑筋了,因为我没有做过嵌入式开发,我还以为是后台的无限循环程序可以处理中断的,没想到看到答案真让我大跌眼镜,这家公司看来我也不必去了。

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
34 [报告]
发表于 2010-03-21 22:18 |只看该作者
学习了。

论坛徽章:
0
35 [报告]
发表于 2010-03-22 08:29 |只看该作者
回复 7# 老手


    里面讲的好像也是一些优化,第二个要比第一个效率高写,不用每次循环的时候,都去判断。

论坛徽章:
0
36 [报告]
发表于 2010-03-22 09:56 |只看该作者
回复 33# moonwhite999


    同学,你这代码写的乱啊。。。   局部变量也没初始化,找到的也不是第一个唯一出现的字母,很不规范啊。。

论坛徽章:
0
37 [报告]
发表于 2010-03-22 12:23 |只看该作者
第二道题贴上我的程序吧,已调试通过的,我知道在大牛眼里不屑一顾,但我刚工作时得到很多不认识的人的帮助 ...
moonwhite999 发表于 2010-03-21 21:31



设计思路上, 你做了2个假设:

1. 字符串中都是英文字母,且都是小写的.
2. 字符串里符合要求的情况要么没有,要么只会有一次..


你很认真.
可以训练一段时间,再上沙场.

论坛徽章:
0
38 [报告]
发表于 2010-03-22 13:09 |只看该作者
回复  jhzhu_snps


    能不能把判断拿到循环外由业务逻辑决定,试想下,如果在for()里改变了condit ...
doofy 发表于 2010-03-20 21:39



    既然出了这样的题,就假设这个condition是循环不变量好了。问题就变成关于循环不变量的控制流分析及优化的作用和影响,所以我觉得答案应该是:
    1. 外提循环不变量能提高代码的执行效率
   2. 在硬件提供强大的分支预测的优化功能时,外提循环不变量的优化效果有限
   3. 外提在控制语句中所使用的循环不变量会导致代码膨胀,可能不适用于嵌入式应用。

论坛徽章:
0
39 [报告]
发表于 2010-03-22 14:25 |只看该作者
回复 33# moonwhite999


    楼主我也写了个,和你思路一样。只是简化了一些,希望能有帮助。

  1. #include <stdio.h>
  2. #include <limits.h>

  3. char* find_first_once(char* s)
  4. {
  5.         int map[UCHAR_MAX] = {0};
  6.         char *tmp = s;
  7.         while (*tmp)
  8.                 ++map[*tmp++];
  9.         while (*s)
  10.                 if (1 == map[*s])
  11.                         return s;
  12.                 else
  13.                         s++;
  14.         return NULL;
  15. }

  16. int main(int argc, char* argv[])
  17. {
  18.         char *s = "abcdabce";
  19.         char *p = find_first_once(s);
  20.         if (p)
  21.         {
  22.                 printf("%c:%d\n", *p, p-s);
  23.         }
  24.         else
  25.         {
  26.                 printf("none!\n");
  27.         }
  28.         return 0;
  29. }
复制代码

论坛徽章:
0
40 [报告]
发表于 2010-03-22 14:46 |只看该作者
shun shou xie le ge

  1. int find(char * str)
  2. {
  3.         int ii,var,len;
  4.         len=strlen(str);
  5.         for(ii=0;ii<len;ii++)
  6.         {
  7.                 char b= str[ii];
  8.                 int jj;
  9.                 for(jj=0;jj<len;jj++)
  10.                 {
  11.                         if (b == str[jj] && jj !=ii)
  12.                         break;
  13.                 }
  14.                 if(jj == len)
  15.                 {
  16.                         printf("%c:pos:%d\n",str[ii],ii);
  17.                         break;
  18.                 }
  19.         }
  20. }
  21. void main()
  22. {
  23.         char strin[]="abcdabce";
  24.         find(strin);
  25. }
复制代码

result:
XX@XX:/opt/$ ./a.out
d:pos:3
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP