分享

笔试试题

 lhzstudio 2012-05-15

最近,接到了XXX公司的面试!有几道比较基本的算法试题如下

1、将一个单向列表逆序

2、统计在一个字符串中,字符出现次数最多的一个字符和次数

3、将一个数值转换为任意进制的格式数,并且以字符串的格式保存

下面是我自己写的,留着以后再用


  1. typedef struct node  
  2. {  
  3.     int data;  
  4.     node* pnext;  
  5.   
  6. }*lpNode, Node;  
  7.   
  8. /* 
  9.     函数介绍:将单向列表逆序 
  10.     参数介绍: 
  11.              -pHeader[in]:头节点指针 
  12.     返回值: 
  13.            逆序后的头节点指针     
  14. */  
  15. lpNode Reverse(lpNode pHeader)  
  16. {  
  17.     lpNode pT,pT1,pT2;  
  18.     pT1 = pHeader;  
  19.     pT2 = pHeader->pnext;  
  20.     while(pT2)  
  21.     {  
  22.         pT = pT2->pnext;  
  23.         pT2->pnext = pT1;  
  24.         pT1 = pT2;  
  25.         pT2 = pT;  
  26.     }  
  27.   
  28.     pHeader ->pnext = NULL;  
  29.   
  30.     pHeader = pT1;  
  31.   
  32.     return pHeader;  
  33. }  
  34.   
  35. void PrintfNode(lpNode pHeader)  
  36. {  
  37.     lpNode pT = pHeader;  
  38.     while(pT)  
  39.     {  
  40.         std::cout << pT->data << std::endl;  
  41.         pT = pT->pnext;  
  42.     }  
  43. }  
  44.   
  45. /* 
  46.     函数介绍:统计连续出现字符次数最多的字符和次数("aaabbbbbcccc" b出现5次) 
  47.     参数介绍: 
  48.              -str[in]:待统计的字符串指针 
  49.              -pcount[in,out]:统计次数的指针 
  50.     返回值: 
  51.            出现字符最多的字符     
  52. */  
  53. char CountChar(char *str,int* pcount)  
  54. {  
  55.     int iLen = strlen(str);  
  56.     *pcount = 0;  
  57.     char cOut = ' ';  
  58.   
  59.     for(int i = 0; i < iLen; i++)  
  60.     {  
  61.         int iCount = 1;  
  62.         for(int j = i; j < iLen; j++)  
  63.         {  
  64.             if(str[j] == str[j + 1])  
  65.                 iCount++;  
  66.             else  
  67.                 break;  
  68.         }  
  69.   
  70.         if(iCount > *pcount)  
  71.         {  
  72.             *pcount = iCount;  
  73.             cOut = str[i];  
  74.         }  
  75.     }  
  76.   
  77.     return cOut;  
  78. }  
  79.   
  80. /* 
  81.     函数介绍:将数值转换为任意进制的格式字符输出 
  82.     参数介绍: 
  83.              -iValue[in]:待转换的数值 
  84.              -szBuf[in,out]:保存转后的字符 
  85.              -uiDecimal[in]:要换行的进制 
  86.     返回值: 
  87.            无     
  88. */  
  89. void FormatValueToString(int iValue,char *szBuf,unsigned int uiDecimal)  
  90. {  
  91.     if(szBuf == NULL) return;  
  92.   
  93.     int i = 0;  
  94.     while(iValue)  
  95.     {  
  96.         //sprintf(szBuf + i++,"%d",iValue%uiDecimal);   
  97.         szBuf[i++] = iValue%uiDecimal + 48;//'0'的值为48   
  98.         iValue /=uiDecimal;  
  99.     }  
  100.   
  101.     //调整高低位的位置   
  102.     int iLen = strlen(szBuf);  
  103.     for(i = 0; i < iLen/2;i++)  
  104.     {  
  105.         char ctemp = szBuf[i];  
  106.         szBuf[i] = szBuf[iLen -1 - i ];  
  107.         szBuf[iLen -1 - i] = ctemp;  
  108.     }  
  109. }  
  110.   
  111. int _tmain(int argc, _TCHAR* argv[])  
  112. {  
  113.     Node node_9 ={9,NULL};  
  114.     Node node_8 ={8,&node_9};  
  115.     Node node_7 ={7,&node_8};  
  116.     Node node_6 ={6,&node_7};  
  117.     Node node_5 ={5,&node_6};  
  118.     Node node_4 ={4,&node_5};  
  119.     Node node_3 ={3,&node_4};  
  120.     Node node_2 ={2,&node_3};  
  121.     Node node_1 ={1,&node_2};  
  122.     Node node_0 ={0,&node_1};  
  123.   
  124.     std::cout << "****************before******************"<<std::endl;  
  125.     PrintfNode(&node_0);  
  126.     std::cout << "****************after*******************"<<std::endl;  
  127.     PrintfNode(Reverse(&node_0));  
  128.   
  129.     std::cout << "****************CountChar***************"<<std::endl;  
  130.     int iCount = 0;;  
  131.     std::cout <<CountChar("abcdefghijklmnopqrstuvwxyz",&iCount)<< ":";  
  132.     std::cout<< iCount << std::endl;  
  133.   
  134.     std::cout << "************FormatValueToString*********"<<std::endl;  
  135.     char buff[32] ={0};  
  136.     FormatValueToString(65535,buff,8);  
  137.     std::cout << buff <<std::endl;  
  138.   
  139.     return 0;  
  140. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多