2017 CVTE春招内推专场 C/C++软件开发岗笔试编程题

先来一波吐槽:选择题全是不定项选择,考的内容在我看来,“反正我接受唔到咯”。

比如:

1.Windows操作系统某个通信机制(具体题目忘了,反正答案我选了个熟悉的名词“消息队列”)。

    EXM???服,我还真从来没关注过Windows的任何机制。手动黑人问号。

x. 以下哪些属于Linux的发行版本?A.OpenSUSE B.Red-hat C. CentOS D.Ubuntu

   EXM???所谓的考Linux就是这样考的?再次手动黑人问号。

还有一题问的是Linux设备调用接口什么的,没搞过,真不清楚,瞎选。

其他的还挺常规,比如问哪些属于交换排序、哪些排序算法序列的初始状态不影响比较次数、多态、死锁、计算机网络(考的是FTP的传输模式)等。

 

-----------------分割线------------------

两道题,都很简单。

1. 给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。

sample:

输入:“abcdefcba”

输出:3

解法:先遍历字符串,用一个map记录每个字符出现的次数,再次遍历字符串,找到第一个只出现一次的字符,复杂度为O(n)。

 1 #include <iostream>
 2 #include <string>
 3 #include <cstring>
 4 #include <map>
 5 using namespace std;
 6 
 7 int getCharIndex(const char *str)
 8 {
 9     map<char, int> cmap;
10     int length = strlen(str);
11     for (int i = 0; i < length; ++i)
12         ++ cmap[str[i]];
13     
14     int ret = -1;
15     for (int i = 0; i < length; ++i)
16         if (cmap[str[i]] == 1)
17         {
18             ret = i;
19             break;
20         }
21     
22     return ret;
23 }
24 
25 int main()
26 {
27     string str;
28     cin >> str;
29     cout << getCharIndex(str.c_str()) << endl;
30 }

 

2. n个人围着圆桌坐,编号1~n,从第k个开始报数,报到m者出列,后一个继续从1开始报数。问最后一个出列者的编号。输入n, k, m.

sample1:

  输入:3 1 1

  输出:3

sample2:
  输入:3 2 2

  输出:1

解法:首先,看到这种题目就感觉会有特别的规律,但思前想后还是归纳不出来,只好用循环链表直接模拟,复杂度O(nm)。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef struct Node
 6 {
 7     int num;
 8     Node *next;
 9 } Node;
10 
11 // 构造循环链表 
12 void construct(Node **head, int n)
13 {
14     *head = new Node;
15     (*head)->num = 1;
16     (*head)->next = NULL;
17     Node *pNode = *head;
18 
19     for (int i = 2; i <= n; i++)
20     {
21         Node *pNew = new Node;
22         pNew->num = i;
23         pNew->next = NULL;
24         while (pNode->next != NULL)
25             pNode = pNode->next;
26             
27         pNode->next = pNew;
28         pNode = pNode->next;
29     }
30     pNode->next = *head;
31 }
32 
33 
34 int solve(int n, int k, int m)
35 {
36     // 过滤非法输入 
37     if (n < 1 || k < 1 || k > n || m <= 0)
38         return 0;
39     
40     // 数到1就出列的情况下,即从k开始逐个出列
41     // 若k = 1, 最后一个为n; 否则为k-1.  
42     else if (m == 1)
43         return (k == 1 ? n : k-1);
44     
45     // 构造循环链表 
46     Node *head = NULL;
47     construct(&head, n);
48         
49     // 从k开始报数,故先跳到第k个 
50     Node *pNode = head;
51     for (int i = k; i > 1; --i)
52         pNode = pNode->next;
53     
54     // 模拟报数n-1次, 每次出列一人,删除出列的结点 
55     int num = 1;
56     Node *pPrev;
57     for (int i = 0; i < n - 1; i++)
58     {
59         while (num < m)
60         {
61             pPrev = pNode;
62             pNode = pNode->next;
63             ++num;
64         }
65         Node *pToDel = pNode;
66         pNode = pNode->next;
67         pPrev->next = pNode;
68         delete pToDel;
69         num = 1;
70     }
71     int ret =  pNode->num;
72     delete pNode;  // 避免内存泄露,释放最后一个结点 
73     return ret;
74 }
75 int main()
76 {
77     int n, k, m;
78     int t;
79     cin >> t;
80     while (t--)
81     {
82         cin >> n >> k >> m;
83         cout << solve(n, k, m) << endl;
84     }
85 }

总结:编程题很简单,但选择题感觉错了挺多的,估计笔试都过不了,有点不开心。反正我GG了,后面那批兄弟姐妹们加油。

转载于:https://www.cnblogs.com/Jay-Wong/p/6474220.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值