热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

某公司C笔试题[个人解法]

原题出处:http:topic.csdn.netu20081011159ee842e0-9c0d-4804-8376-42abdfe80698.html1.编写函数,检查给定字符串是否

 原题出处:http://topic.csdn.net/u/20081011/15/9ee842e0-9c0d-4804-8376-42abdfe80698.html

 

1.编写函数,检查给定字符串是否整数,如果是,返回其整数值(注:不允许使用某种特定的库函数)。
2.有两个无序链表lsit1和list2,编写函数把list1和list2合并成一个递增的链表。
3.编写一段高效的代码,从排序的后的整数中找出指定整数n的个数。如找出[1,1,3,3,3,
    5,5,5,9,9,9,9]中的5的个数(为3个)。
4. 编写函数实现字符串分割。SourceStr为源串,splitStr为分割字符串,SplitStr中的每一个字符在SourceStr被看作是分 
  割符。函数需要返回被分割符分割好的字符串链表。
  例如: 如果
      SourceStr为“this is pen ,that is a ball.”。
      SplitStr  为“, .”
 
  则返回的字符串链表每一项值分别为:“this” “is” “ pen”…
5.某银行有N个业务办理窗口,每一个窗口能办理各种业务, 银行客户分为VIP可与和普通客户,VIP客户有优先办理权,请你结合实际的应用场景为该银行设计排队机系统。
  1)设计关键的数据结构和算法并用代码表示。
  2)用自己的方式表达出系统的运转流程。

 

这里只做下第一题和题四题,第五题等以后有空再想想。

 

  1. /****************************************************************************
  2. 题目要求 :编写函数,检查给定字符串是否整数,如果是,返回其整数值(注:不允许使用某种特定的库函数)。 
  3. 用C描述的算法,注释略
  4. ****************************************************************************/
  5. int is_int(const char *str, int *num)
  6. {
  7.     char *p = (char *)str;
  8.     int temp = 0;
  9.     char sign = '+';
  10.     if ( !str )
  11.     {
  12.         assert(0);
  13.         return 0;
  14.     }
  15.     do 
  16.     {
  17.         if ( *p == ' ' )
  18.         {
  19.             p++;
  20.         }
  21.         else
  22.         {
  23.             break;
  24.         }
  25.     } while( *p != '/0' );
  26.     if ( *p == '-' || *p == '+' )
  27.     {
  28.         sign = *p++;
  29.     }
  30.     while ( *p != '/0' ) 
  31.     {
  32.         if ( (*p >= '0') && (*p <= '9') )
  33.         {
  34.             temp = temp * 10 + (*p - '0');
  35.         }
  36.         else
  37.         {
  38.             return 0;
  39.         }
  40.         p++;
  41.     }
  42.     *num = sign == '-' ? -temp : temp;
  43.     return 1;
  44. }
  45. /****************************************************************************
  46. 题目要求 :编写函数实现字符串分割。SourceStr为源串,splitStr为分割字符串,SplitStr中的每一个字符在SourceStr被看作是分 
  47. 割符。函数需要返回被分割符分割好的字符串链表。 
  48. 例如: 如果 
  49. SourceStr为“this is pen ,that is a ball.”。 
  50. SplitStr 为“, .”
  51. 用C描述的算法,注释略
  52. ****************************************************************************/
  53. struct node{
  54. char *str;
  55. struct node *next;
  56. };
  57. node* split_string(const char *str, const char *token)
  58. {
  59.     char *p = (char *)str;
  60.     char *ch = (char *)token;
  61.     char map[128];
  62.     char *pos = p;
  63.     char *substr = NULL;
  64.     node l;
  65.     node *plist = &l;
  66.     node *pnode = NULL;
  67.     int loop = 0;
  68.     if ( str == NULL || token == NULL )
  69.     {
  70.         assert(0);
  71.         return NULL;
  72.     }
  73.     l.next = NULL;
  74.     while ( *ch != '/0' )
  75.     {
  76.         map[*ch] = *ch++;
  77.     }
  78.     while ( *p != '/0' )
  79.     {
  80.         if ( map[*p] == *p )
  81.         {
  82.             pnode = (node *)malloc(sizeof(node));
  83.             substr = (char *)malloc(sizeof(char) * (p - pos + 1));
  84.             while ( pos != p )
  85.             {
  86.                 substr[loop++] = *pos++;
  87.             }
  88.             substr[loop] = '/0';
  89.             pnode->next = NULL;
  90.             pnode->str = substr;
  91.             plist->next = pnode;
  92.             plist = pnode;
  93.             loop = 0; 
  94.             pos = ++p;
  95.         }
  96.         else
  97.         {
  98.             ++p;
  99.         }
  100.     }
  101.     return l.next; 
  102. }
  103. void print_list(node *l)
  104. {
  105.     while ( l != NULL )
  106.     {
  107.         printf("%s|", l->str);
  108.         l = l->next;
  109.     }
  110. }
  111. void free_memory(node *l)
  112. {
  113.     node *p = l;
  114.     if ( l == NULL )
  115.     {
  116.         return;
  117.     }
  118.     do 
  119.     {
  120.         p = l->next;
  121.         free(l->str);
  122.         free(l);
  123.         l = p;
  124.     } while( l != NULL );
  125. }
  126. /*两算法简单测试*/
  127. #include 
  128. #include 
  129. int main(int argc, char* argv[])
  130. {
  131.     int num = 0;
  132.     char *strtest = " this is pen , that is a bal. ";
  133.     node *l = NULL;
  134.     is_int(" +51111", &num);
  135.     printf("%d/n", num);
  136.     cout << endl << endl;
  137.     cout << strtest << endl; 
  138.     l = split_string(strtest, ", .");
  139.     print_list(l);
  140.     free_memory(l);
  141.     l = NULL; 
  142.     system("pause");
  143.     return 0;
  144. }

推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
author-avatar
老黑_微笑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有