CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

昨天参加笔试的两道题

楼主mars841215(龙行天下)2006-10-24 08:29:54 在 C/C++ / C语言 提问

1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
   
  2.有50个连续的存储单元存有50个数,如果用顺序选择法找出最大值和最小值,则至少要进行97次比较.  
      请给出其他方法,要求要比较次数要少于97次.(当然越小越好)  
  3.  
      有如下程序段.  
      int   i   =   10;  
      i   +=   5;  
      i   -=   7;  
      当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i   的值为多少? 问题点数:60、回复次数:71Top

1 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 08:39:26 得分 0

1       简单,  
  判断一下是否大于   10   ,   是则分解各个位求和Top

2 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 08:48:16 得分 0

IP     是指令寄存器,  
  +1   也就是跳过了一条指令,  
  结果就是       i   +=   5;   没有执行,  
  直接执行     i   -=   7;  
  最后得到   i   =   10-7   =   3Top

3 楼mars841215(龙行天下)回复于 2006-10-24 08:56:42 得分 0

第二道题有没有人知道啊?Top

4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 09:03:48 得分 0

2.  
   
  int   arr[50]={...};  
  int   min,   max,i;  
   
  min=max=arr[0];  
  for(i=0;   i<50;   i++)  
    if(arr[i]   >   max)   max=arr[i];  
    else   if(arr[i]<min)   min   =   arr[i];  
   
  printf("The   max   num   is:   %d\n",   max);  
  printf("The   min   num   is:   %d\n",   min);  
   
  最多比较次数   98,  
  最少   49   次     ........Top

5 楼mars841215(龙行天下)回复于 2006-10-24 09:06:45 得分 0

楼上的解法好像就是顺序选择....不符合要求..Top

6 楼weakend(0912)回复于 2006-10-24 09:17:29 得分 0

此题出自《算法导论》中的“中位数与顺序统计”一章,为原书例题。  
  先在原数组中拿出两个数比较一下,小的那个数跟当前最小值比较,大的那个跟当前最大值比较,即可。在刚开始初始化的时候分奇偶数进行分别初始化。  
  无论奇偶比较次数都不多于   3[n/2]  
  Top

7 楼mars841215(龙行天下)回复于 2006-10-24 09:36:43 得分 0

楼上能不能再详细一点?   最开始最大值和最小值初始化为多少?Top

8 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 09:48:41 得分 0

1,int[]  
  2,第一次:两两比较,每次出一个大值B1i,小值S1j;  
   
      第二次:两两比较,B1i比较出B2i,S1j比较出S2j  
  。  
  。  
  。  
      第n-1次:两两比较,出B(n-1)和S(n-1)  
      若个数为偶数,这个就是终值,  
      若个数为奇数,第n次:再比较2次,出Bn和Sn  
  ---------------------------------------------  
  以个数50为例:应该是  
  第一次:24组(B1   1   ~   B1   24,S1   1   ~   S1   24)+组A(B1   25和S1   25)  
  第二次:12组(B2   1   ~   B2   12,S2   1   ~   S2   12)+组A(B1   25和S1   25)  
  第三次:6组   (B3   1   ~   B3   6,S3   1   ~   S3   6)     +组A(B1   25和S1   25)  
  第四次:2组   (B4   1   ~   B4   2,S4   1   ~   S4   2)     +组A(B1   25和S1   25)+组C(B4   3和S4   3)  
  第五次:1组   (B5   1,S5   1)                                   +组D(B5   2   和S5   2)  
  第六次:B6   ,S6  
  一共是25   +12*2   +6*2   +3*2   +(1*2+1*2)+1*2   =73  
   
  3,不知道  
  ==============================================  
  仅供参考,可能有问题,只是预演,没有具体写……  
  呵呵  
   
  Top

9 楼mars841215(龙行天下)回复于 2006-10-24 09:49:08 得分 0

不好意思,没分可用了...问一道笔试题---考测试  
   
  一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..Top

10 楼weakend(0912)回复于 2006-10-24 09:51:42 得分 0

初始化时:如果是奇数就把第一个数赋值给当前最大值和最小值;如果是偶数就把前两个数比较一下,小的作为当前最小值,大的为当前最大值。  
  完毕。  
   
  Top

11 楼weakend(0912)回复于 2006-10-24 10:06:56 得分 0

cubety(int   argc,char*argv[])   (   )   信誉:100         Blog     2006-10-24   09:48:00     得分:   0      
     
     
        1,int[]  
  2,第一次:两两比较,每次出一个大值B1i,小值S1j;  
   
      第二次:两两比较,B1i比较出B2i,S1j比较出S2j  
  。  
  。  
  。  
      第n-1次:两两比较,出B(n-1)和S(n-1)  
      若个数为偶数,这个就是终值,  
      若个数为奇数,第n次:再比较2次,出Bn和Sn  
  ---------------------------------------------  
  以个数50为例:应该是  
  第一次:24组(B1   1   ~   B1   24,S1   1   ~   S1   24)+组A(B1   25和S1   25)  
  第二次:12组(B2   1   ~   B2   12,S2   1   ~   S2   12)+组A(B1   25和S1   25)  
  第三次:6组   (B3   1   ~   B3   6,S3   1   ~   S3   6)     +组A(B1   25和S1   25)  
  第四次:2组   (B4   1   ~   B4   2,S4   1   ~   S4   2)     +组A(B1   25和S1   25)+组C(B4   3和S4   3)  
  第五次:1组   (B5   1,S5   1)                                   +组D(B5   2   和S5   2)  
  第六次:B6   ,S6  
  一共是25   +12*2   +6*2   +3*2   +(1*2+1*2)+1*2   =73  
   
  3,不知道  
  ==============================================  
  仅供参考,可能有问题,只是预演,没有具体写……  
  呵呵  
   
   
   
  ///////////////////////////////////////////////////////////  
   
  算法错误!Top

12 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-10-24 10:12:57 得分 0

IP     是指令寄存器,  
  +1   也就是跳过了一条指令,  
  结果就是       i   +=   5;   没有执行,  
  直接执行     i   -=   7;  
  最后得到   i   =   10-7   =   3  
  -------------------------------------  
  IP   +   1   并非跳过一条指令,而是一个在代码段中跳过一个字节,一条指令可能有很多字节的。  
  就算是一条指令,也不是一条   C++   语句,   一条语句编译后可能是   N   多指令Top

13 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:13:17 得分 0

一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..  
  ---------------------------  
  -----------------------------  
  以下为有损测试过程  
  一,以任何角度掰成两半,测试半卡性能  
      需要测试的数据:1,掰断的平均力度。建议设置在女生稍微用力就能弄断为最佳  
                                      2,裂纹轨迹。尽量使裂纹往电路(或者卡里面的主要单元)那边靠,  
                                                          以免流行半卡主义  
  二,Top

14 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:15:04 得分 0

算法错误!  
  ----------  
  说说怎么错了,请指教Top

15 楼weakend(0912)回复于 2006-10-24 10:36:42 得分 0

不好意思,刚才把  
  cubety(int   argc,char*argv[])   中的  
  2,第一次:两两比较,每次出一个大值B1i,小值S1j;  
   
  这句理解错了  
   
  现在看来cubety(int   argc,char*argv[])   想表达的应该是  
  2,第一次:两两比较,每次出一对     大值B1i,小值S1j;  
   
  此思路比较次数与算法导论思路一样,只是稍更复杂了一些。  
  特此道谦,谢谢指正。  
  Top

16 楼pcboyxhy(-273.15℃)回复于 2006-10-24 10:37:29 得分 0

1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
   
   
  3.  
  有如下程序段.  
  int   i   =   10;  
  i   +=   5;  
  i   -=   7;  
  当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i   的值为多少?  
   
  这个比较复杂  
  首先  
  i+5并不能保证就是原子操作  
  操作系统调度的时候  
  很可能在执行完int   i=10;之后就把时间片分配给了别的进程  
  这样EIP加1对这个进程就没有影响了Top

17 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:42:04 得分 0

此思路比较次数与算法导论思路一样,只是稍更复杂了一些。  
  特此道谦,谢谢指正。  
  -----------------------------  
  用不着道歉,呵呵   ,大家都是来讨论问题的Top

18 楼qxbnit(蓝灵)回复于 2006-10-24 11:02:28 得分 0

我才疏学浅:  
   
  偷偷的说;  
   
  第一题:最笨的办法:数字拆开成数组,然后一个个加,直到数组长度是1  
   
  第二题:冒泡泡排序,应该可以吧  
   
  第三题:本来想说i-=7的,也就是10-7   =   3,可看到楼上说有可能什么系统调度—……%¥*¥……*!·#%¥,只是道测试题,测试的人不会问这么复杂吧…………Top

19 楼benjiam(今晚打老虎)回复于 2006-10-24 11:09:59 得分 0

还2星星呢?   明显错误  
  +1   不代表   跳过一条指令   而是一个字节  
   
  所以结果为10  
   
  Top

20 楼wp03141592(涵)回复于 2006-10-24 11:17:18 得分 0

第一题:用函数的递归调用  
  第二题:二分排序  
  第三题:同意一楼意见Top

21 楼cjianwen(空前)回复于 2006-10-24 11:42:09 得分 0

偶只会做第一题:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          l,i,n,t:   Integer;  
          s:   String;  
  begin  
          n   :=   StrToInt(Edit1.Text);  
          ListBox1.Items.Add(Edit1.Text);  
          while   (n   >   10)   do  
          begin  
                  t   :=   0;  
                  s   :=   IntToStr(n);  
                  l   :=   Length(s);  
                  for   i   :=   1   to   l   do  
                          t   :=   t   +   StrToInt(s[i]);  
                  n   :=   t;  
                  ListBox1.Items.Add(IntToStr(N));  
          end;  
  end;  
   
  哈哈。。。Top

22 楼cjianwen(空前)回复于 2006-10-24 11:43:43 得分 0

晕,掉了=号。。。Top

23 楼superarhow(苏泊尔耗)回复于 2006-10-24 11:51:28 得分 0

跳过1个字节,指令就完全变了啊,AV啊、II啊、SO啊,都可能出现的   -___-bTop

24 楼youzelin()回复于 2006-10-24 11:55:07 得分 0

学习Top

25 楼weiym(磨刀霍霍向猪羊)回复于 2006-10-24 12:01:07 得分 0

第一题  
  #include   <iostream>  
   
  using   namespace   std;  
   
  int   seperateNum(int   n,int   sBuf[],int   nLen)  
  {  
  int   nTemp=n;  
  int   i=0;  
  while((nTemp>=10)&&(i<nLen-1))  
  {  
  sBuf[i++]=nTemp%10;  
  nTemp=nTemp/10;  
  }  
  sBuf[i++]=nTemp;  
  return   i;  
  }  
  int   getSum(int   sBuf[],int   n)  
  {  
  int   nRet=0;  
  for(int   i=0;i<n;i++)  
  {  
  nRet+=sBuf[i];  
  }  
  return   nRet;  
  }  
  void   printResult(int   sBuf[],int   n,int   nValue)  
  {  
  for(int   i=n-1;i>=0;i--)  
  {  
  cout<<   sBuf[i];  
  }  
  cout<<"\n";  
  cout<<nValue;  
  cout<<"\n\n";  
  }  
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
  int   sBuf[10];  
  const   int   N=1234567;  
  int   n=N;  
  int   nLen;  
  while(n>10)  
  {  
    nLen=seperateNum(n,sBuf,10);  
    n=getSum(sBuf,nLen);  
    printResult(sBuf,nLen,n);  
  }  
  return   0;  
  }Top

26 楼wulei5482(忍者)回复于 2006-10-24 12:28:36 得分 0

pcboyxhy(-273.15℃)   (   )   信誉:110         Blog     2006-10-24   10:37:30     得分:   0      
     
     
         
  1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
  =========================================================  
  拜一个,这么牛b的方法居然没人关注啊  
   
  x*100+y*10+z   是原数,x+y+z是要算的数  
   
  x*100+y*10+z   =   9*(11x+y)+x+y+zTop

27 楼leibo3008(渔民)回复于 2006-10-24 12:32:30 得分 0

markTop

28 楼leibo3008(渔民)回复于 2006-10-24 12:45:07 得分 0

第二题:用下面的程序只需比较(50-2)*3/2+1=73次。  
  和weakend的有点像,但好像不用判断奇偶吧。  
   
  main()  
  {   int   a[50],max,min;  
      int   i;  
       
      if(a[0]<a[1])   {min=a[0];max=a[1];}  
      else   {min=a[1];max=a[0];}  
       
      for(i=2;i<50;i+=2)  
              if(a[i]>a[i+1])   {if(a[i]>max)   max=a[i];   if(a[i+1]<min)   min=a[i+1];}  
              else   {if(a[i+1]>max)   max=a[i+1];   if(a[i]<min)   min=a[i];}  
   
      printf("max=%d,min=%d.\n",max,min);  
       
  }Top

29 楼qxbnit(蓝灵)回复于 2006-10-24 12:55:42 得分 0

pcboyxhy(-273.15℃)   (   )   信誉:110         Blog     2006-10-24   10:37:30     得分:   0      
     
     
         
  1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
  =========================================================  
  拜一个,这么牛b的方法居然没人关注啊  
   
  x*100+y*10+z   是原数,x+y+z是要算的数  
   
  x*100+y*10+z   =   9*(11x+y)+x+y+z  
   
  =============  
   
  如果之前没看见过题目,看到这个帖子,立即想到这个算法,,的确NB!---->数学很NB!Top

30 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 13:09:42 得分 0

不是ip而是pc  
  pc加一的结果是跳一个cpu字,字的大小与cpu的位数有关,通常一条cpu指令大小为一个cpu字的大小  
  那高级语言来讨论汇编,就像盲人摸象。Top

31 楼songlife33(美女,偶们结婚吧)回复于 2006-10-24 13:58:26 得分 0

IP     是指令寄存器,  
  +1   也就是跳过了一条指令,  
  结果就是       i   +=   5;   没有执行,  
  直接执行     i   -=   7;  
  最后得到   i   =   10-7   =   3  
   
   
  你就确定i   +=   5;被编译后是一条指令?  
   
  Top

32 楼songlife33(美女,偶们结婚吧)回复于 2006-10-24 13:58:58 得分 0

这题根本就事忽悠人地!Top

33 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 14:22:38 得分 0

pc程序计数器  
  ir指令寄存器  
   
  ir=正在执行的指令  
  pc=指向下一条读入ir的指令的地志Top

34 楼dandanmylady(张师傅说:"活着就是为了消费")回复于 2006-10-24 14:24:56 得分 0

mark  
  Top

35 楼weakend(0912)回复于 2006-10-24 14:28:40 得分 0

leibo3008(渔民)   (   )   信誉:100         Blog     2006-10-24   12:45:00     得分:   0      
     
     
        第二题:用下面的程序只需比较(50-2)*3/2+1=73次。  
  和weakend的有点像,但好像不用判断奇偶吧。  
   
  /////////////////////////////////////////////////////////////////////////////  
  初始时是要讨论奇偶的。不然leibo3008(渔民)的程序只能对偶数起作用(比如此题的50)。  
  完毕。Top

36 楼blue_zyb()回复于 2006-10-24 14:29:08 得分 0

恩,9的倍数各位之和能被9整除,有点意思,学习了。Top

37 楼horsoner(Kity)回复于 2006-10-24 14:29:15 得分 0

 
    pcboyxhy(-273.15℃)   (   )   信誉:110         Blog     2006-10-24   10:37:30     得分:   0      
  ==========================================================================  
   
  牛人!!Top

38 楼qdhuxp(阿牛)回复于 2006-10-24 14:42:42 得分 0

pcboyxhy(-273.15℃)   (   )   信誉:110         Blog     2006-10-24   10:37:30     得分:   0    
   
  9的倍数!  
   
  赞!!!Top

39 楼justrun2005(机枪)回复于 2006-10-24 15:43:20 得分 0

这是昨天晚上西工大葡萄城的笔试题啊。  
  那些题我都做了,第二题那种的确不会超过75次比较。呵呵,楼主是西工大的吧?  
  我是b卷,求各位和的那个题卷子上没有啊,必作的编程题是求前n个素数和啊,这些题都没啥难度。Top

40 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 16:04:44 得分 0

拜~~~~~~~  
  pcboyxhy(-273.15℃)  
  之前忽略了Top

41 楼yuanwenbin(学好了,钱多了,美女自然就有了)回复于 2006-10-24 16:13:41 得分 0

pcboyxhy(-273.15℃)   (   )   信誉:110         Blog     2006-10-24   10:37:30     得分:   0      
     
     
         
  1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
  =========================================================  
  拜一个,这么牛b的方法居然没人关注啊  
   
  x*100+y*10+z   是原数,x+y+z是要算的数  
   
  x*100+y*10+z   =   9*(11x+y)+x+y+z  
   
  顶一下,确实是啊Top

42 楼yuanwenbin(学好了,钱多了,美女自然就有了)回复于 2006-10-24 16:17:42 得分 0

第一题  
  #include   <iostream>  
   
  using   namespace   std;  
   
  int   seperateNum(int   n,int   sBuf[],int   nLen)  
  {  
  int   nTemp=n;  
  int   i=0;  
  while((nTemp>=10)&&(i<nLen-1))  
  {  
  sBuf[i++]=nTemp%10;  
  nTemp=nTemp/10;  
  }  
  sBuf[i++]=nTemp;  
  return   i;  
  }  
  int   getSum(int   sBuf[],int   n)  
  {  
  int   nRet=0;  
  for(int   i=0;i<n;i++)  
  {  
  nRet+=sBuf[i];  
  }  
  return   nRet;  
  }  
  void   printResult(int   sBuf[],int   n,int   nValue)  
  {  
  for(int   i=n-1;i>=0;i--)  
  {  
  cout<<   sBuf[i];  
  }  
  cout<<"\n";  
  cout<<nValue;  
  cout<<"\n\n";  
  }  
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
  int   sBuf[10];  
  const   int   N=1234567;  
  int   n=N;  
  int   nLen;  
  while(n>10)  
  {  
    nLen=seperateNum(n,sBuf,10);  
    n=getSum(sBuf,nLen);  
    printResult(sBuf,nLen,n);  
  }  
  return   0;  
  }  
   
   
  是   n   >   9   拉  
  Top

43 楼weakend(0912)回复于 2006-10-24 16:33:28 得分 0

pcboyxhy(-273.15℃)    
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
   
  ///////////  
  其中第二句对吗?  
  比如545454,应该为545454->27->9  
  pcboyxhy(-273.15℃)的方法就是545454->9了。  
   
  Top

44 楼weakend(0912)回复于 2006-10-24 16:46:23 得分 0

还有:  
   
  pcboyxhy(-273.15℃)    
   
  不是9的倍数的,取除以9的余数    
  9的倍数的就是9  
   
  ///////////  
  其中第一句  
  比如545455,应该为545455->28->10-〉1  
  pcboyxhy(-273.15℃)的方法就是545454->1了,其中直接就到1了。  
  题目的本意应该是一步一步的把每个数都输出吧...  
   
   
   
   
       
  Top

45 楼xdspower(杂食菜熊)回复于 2006-10-24 17:19:51 得分 0

1.除了0是特例,就符合pcboyxhy(-273.15℃)的结论,这个在wulei5482(忍者)   的帖子中有解释,不过他还是没有考虑特例问题。此外解释中没有指出这是一个递归解释,即  
  x*100+y*10+z   =   9*(11x+y)+x+y+z,无论x+y+z是否大于10,都可以构造出“新的”x、y和z来满足这个公式,而且这个是可以扩展为无穷位的,比如m*1000+x*100+y+10+z=9(111m+11x+y)+m+x+y+z,这样结论就出来了设这个处理过程为f(),则y=f(x)有   若x=0,y=0;否则若   x%9=0,y=9;否则y=x%9。  
   
  Top

46 楼xddzccn(一个人旅行)回复于 2006-10-24 17:23:36 得分 0

第一个题做过了,不难  
  后面的就有点不懂了Top

47 楼xddzccn(一个人旅行)回复于 2006-10-24 17:26:03 得分 0

 
   
  一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..  
  ---------------------------  
  -----------------------------  
  以下为有损测试过程  
  一,以任何角度掰成两半,测试半卡性能  
  需要测试的数据:1,掰断的平均力度。建议设置在女生稍微用力就能弄断为最佳  
  2,裂纹轨迹。尽量使裂纹往电路(或者卡里面的主要单元)那边靠,  
  以免流行半卡主义  
  二,  
  上学期我的卡就掉到了读卡机里面了,拿出来的时候就只有一半了    
  郁闷害我又花了12块钱买了一张卡Top

48 楼weakend(0912)回复于 2006-10-24 17:33:35 得分 0

pcboyxhy(-273.15℃)对于第一题的解法很不妥,题目的本意是想得到如下效果:  
   
  Input   a   Integer:552  
  552->12->3  
   
  Input   a   Integer:5454  
  5454->18->9  
   
  但是用pcboyxhy(-273.15℃)的方法是得不到这个结果的,直接到最后一个数了,他用了   同余   的原理,很高明,但违背原题本意。Top

49 楼leibo3008(渔民)回复于 2006-10-25 11:34:42 得分 0

leibo3008(渔民)   (   )   信誉:100         Blog     2006-10-24   12:45:00     得分:   0      
     
     
        第二题:用下面的程序只需比较(50-2)*3/2+1=73次。  
  和weakend的有点像,但好像不用判断奇偶吧。  
   
  /////////////////////////////////////////////////////////////////////////////  
  初始时是要讨论奇偶的。不然leibo3008(渔民)的程序只能对偶数起作用(比如此题的50)。  
  完毕。  
   
  ########################################################  
  哦,明白了,谢谢,呵呵!Top

50 楼birdscut()回复于 2006-10-25 13:11:34 得分 0

第一题:偶自己编得,虽然不好,也能做出结果来  
  #include   <iostream.h>  
  #include   <math.h>  
  void   main()  
  {  
  int   a,t=0;  
  int   s;  
  int   i,j;  
  cin>>a;  
  do  
  {  
      for(i=10,j=0;a/i>=1;i=i*10,j++)  
      {  
      }  
        t=0,s=a;  
              for(int   m=pow(10,j);j>0;j--,m=pow(10,j))  
  {  
  t+=s/m;  
          s=s-(s/m)*m;  
  }  
  t+=s;  
                  a=t;  
  }  
  while(t>=10);  
  cout<<t;  
  }Top

51 楼enderjiang()回复于 2006-10-25 13:58:36 得分 0

markTop

52 楼tfrist(tfrist)回复于 2006-10-25 14:11:05 得分 0

IP     是指令寄存器,  
  +1   也就是跳过了一条指令,  
  结果就是       i   +=   5;   没有执行,  
  直接执行     i   -=   7;  
  最后得到   i   =   10-7   =   3  
   
  其实我认为出这道题的人   脑子一定有问题!这是在考什么,说汇编有点太勉强,说c根本就不着边!还在用ip自加,ip自加后轻则运算错误,重则程序崩溃。Top

53 楼watermelontx(晨曦)回复于 2006-10-25 16:11:21 得分 0

第二道,     用冒泡法..Top

54 楼watermelontx(晨曦)回复于 2006-10-25 16:14:37 得分 0

我还以为是要排序呢..看错了.支持上面的.Top

55 楼iicup(双杯献酒)回复于 2006-10-26 09:34:43 得分 0

1.输入一个整数.如552.计算其各位的和,直到结果为一位数.   比如552过程为   552-->12-->3  
  设为N,   如果N==0,   结果为0  
  否则   设n   =   N%9  
  如果   n==0   则结果为   9  
  否则   结果为   n  
   
  int   AddX(int   N)  
  {  
  if(N==0)   return   0;  
  int   n   =   N%9;  
  if(n==0)   return   9;  
  else   return   n;  
  }  
   
   
   
  2.有50个连续的存储单元存有50个数,如果用顺序选择法找出最大值和最小值,则至少要进行97次比较.  
      请给出其他方法,要求要比较次数要少于97次.(当然越小越好)  
   
  如果一个数小于当前最小值,则不可能同时又大于当前最大值,  
  这样就可以节约一些寻找最大值的比较.  
   
   
  3.  
      有如下程序段.  
      int   i   =   10;  
      i   +=   5;  
      i   -=   7;  
      当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i   的值为多少?  
   
  代码是C语言,IP是汇编(机器)语言,不是一个级别,  
  所以结果未知。  
  最大的可能是i的值不变,程序崩溃。Top

56 楼hziee_()回复于 2006-10-27 16:08:05 得分 0

2,      
   
    int   min,max;  
            min   =   max   =   arry[0];  
    for(   int   i=1;   i<50;   i++)  
    {  
        if(   array[i]<min)  
              min   =   array[i];  
        else   if(arry[i]>max)  
              max   =   array[i];  
    }  
  //最多比较98次,最少49次.Top

57 楼hziee_()回复于 2006-10-27 16:11:44 得分 0

不对,题目要求不超过97次  
  所以  
      if   (array[0]   <   array[1])  
        min   =   array[0];max   =   array[1];  
        else  
          min   =   array[1],max   =   array[0]  
      for(   i=2;   i<50;   i++)  
        ...  
        ...Top

58 楼hziee_()回复于 2006-10-27 16:14:01 得分 0

第一提没那么简单,因为整数位数未知,所有  
  要用第规做.Top

59 楼lmlmlmnew()回复于 2006-10-27 17:05:04 得分 0

第一题.....  
  int   i;  
  int   temp;  
  int   sum;  
   
  sum   =   0;  
  temp   =   0;  
  i   =   512;  
   
  while   (i   >   0)  
  {  
  temp   =   i   -   i   /   10   *   10;  
  sum   +=   temp;  
  i   =   i   /   10;  
  }  
   
  printf("%d",   sum);  
  用啥递归阿...  
   
                    int   i   =   10;  
  0040101E     mov                   dword   ptr   [i],0Ah    
  i   +=   5;  
  00401025     mov                   eax,dword   ptr   [i]    
  00401028     add                   eax,5    
  0040102B     mov                   dword   ptr   [i],eax       <--------这里开始吧?  
  i   -=   7;  
  0040102E     mov                   eax,dword   ptr   [i]    
  00401031     sub                   eax,7    
  00401034     mov                   dword   ptr   [i],eax    
  i的值不一定   结果是   i-7Top

60 楼ugvihc(maybe good good study, hope day day up!)回复于 2006-10-27 17:22:21 得分 0

markTop

61 楼hziee_()回复于 2006-10-27 17:23:16 得分 0

第规这样做  
  #include   <iostream>  
  #include   <time.h>  
  using   namespace   std;  
   
      int   add_x(   int   n)  
      {  
      if(   n<10)  
      return   n;  
      int   nn   =   0;  
      while(   n>0)  
      {  
      nn   +=   n%10;  
      n   /=10;  
      }  
      cout<<nn<<"   ->";  
      add_x(nn);  
      }  
  int   main()  
  {  
  srand(   time(NULL)   );  
  int   inter   =   rand();  
  cout<<   inter   <<endl;  
  cout<<   add_x(   inter);  
  system("pause");  
  }Top

62 楼lmlmlmnew()回复于 2006-10-27 18:27:00 得分 0

刚才错了....   >.<    
                  int   i   =   10;  
  0040101E     mov                   dword   ptr   [i],0Ah    
  i   +=   5;  
  00401025     mov                   eax,dword   ptr   [i]    
  00401028     add                   eax,5                                 跳过这个  
  0040102B     mov                   dword   ptr   [i],eax       <--------IP  
  i   -=   7;  
  0040102E     mov                   eax,dword   ptr   [i]    
  00401031     sub                   eax,7    
  00401034     mov                   dword   ptr   [i],eax    
   
  i   =-2Top

63 楼zhenhaojia(真好记)回复于 2006-10-27 18:31:17 得分 0

第一题:  
  1.如果数字小于10,   return  
  2.转换数字到字符串。  
  3.加上没一位形成新的数字,转1  
   
  第二题:锦标赛比较法;就像乒乓球淘汰赛。  
   
  第三题:不知道  
   
  Top

64 楼wang430903(味觉全无)回复于 2006-10-27 19:14:49 得分 0

pcboyxhy(-273.15℃)  
  Top

65 楼Windy83()回复于 2006-10-27 22:38:53 得分 0

int   f(int   i)  
  {  
            int   sum;  
            while(i>9)  
            {  
                                sum=0;  
                      while(i>0)  
                      {  
                              sum+=i%10;  
                              i=i/10;  
                      }  
                      i=sum;  
            }  
            return   i;  
  }Top

66 楼eimhee()回复于 2006-10-27 23:25:19 得分 0

题目1  
  #include   <stdio.h>  
   
  int   convert(int   x);  
   
  int   main()   {  
   
          int   k;  
          int   p=0;  
          scanf("%d",&k);  
          do {  
                  k=convert(k);  
          }while(k>10);  
   
          printf("%d",k);  
  }  
   
  int   convert(int   x)     //计算各位之和  
  {  
          int   t=0;  
          while(1)   {  
   
                  t=t+x%10;  
                  x=x/10;  
   
                  if(x<1)   {  
                          break;  
                  }  
          }  
   
   
          return   t;  
  }Top

67 楼iambic()回复于 2006-10-28 00:01:20 得分 0

哪边的面试题,挺有含量的。Top

68 楼wlxin()回复于 2006-10-28 09:40:37 得分 0

第一题:  
  int   cal(int   n)  
  {  
  int   sum   ,nTemp,i;  
   
  nTemp   =   n;  
  while(1)  
  {  
  i   =   1;  
  sum   =   0;  
   
  printf("nTemp   =   %d\r\n",nTemp);  
  while   (nTemp/i/10   !=   0)  
  {  
  sum+=nTemp%(i*10)/i;  
  i*=10;  
  if(0   ==   nTemp/i/10)  
  {  
  sum+=nTemp/i;  
  }  
  }  
   
  nTemp   =   sum;  
   
  if   (sum   <   10)  
  break;  
  }  
   
  return   sum;  
  }  
   
  void   main()  
  {  
  int   n,  
  scanf("%d",&n);  
   
  cout<<cal(n)<<endl;  
   
  return;  
  }  
   
  第二题主要是排序思路,其实很简单,50个数分为25组,第一组一次比较选出最大的max和最小的min,以后每组的最大和最小的分别和max和min比较,每组最多比较3次,所以有1+24×3=73次比较Top

69 楼ancjf(阿飞)回复于 2006-10-28 21:02:43 得分 0

1  
  #include<iostream>  
   
  using   namespace   std;  
  mian()  
  {  
  int   a;  
  cin>>a;  
  cout<<   (a%9   ?   a%9   :   9);  
  }Top

70 楼overlv()回复于 2006-10-29 12:11:42 得分 0

二分法排序  
  俺是新手  
   
  然后输出第一位和最后一位Top

71 楼wucanbi()回复于 2006-10-29 12:31:16 得分 0

面试大都考的数据结构方面么Top

相关问题

关键词

得分解答快速导航

  • 帖主:mars841215

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo