logo资料库

2014年美团网校园招聘研发工程师长沙站笔试题及答案.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
2014 年美团网校园招聘研发工程师长沙站笔试题及答案 1、一堆硬币,一个机器人,如果是反的就翻正,如果是正的就抛掷一次,无穷多次后,求 正反的比例 解答:是不是题目不完整啊,我算的是 3:1 2、一个汽车公司的产品,甲厂占 40%,乙厂占 60%,甲的次品率是 1%,乙的次品率是 2%, 现在抽出一件汽车时次品,问是甲生产的可能性 解答:典型的贝叶斯公式,p(甲|废品) = p(甲 && 废品) / p(废品) = (0.4 × 0.01) / (0.4 × 0.01 + 0.6 × 0.02) = 0.25 3、k 链表翻转。给出一个链表和一个数 k,比如链表 1→2→3→4→5→6,k=2,则翻转后 2 →1→4→3→6→5,若 k=3,翻转后 3→2→1→6→5→4,若 k=4,翻转后 4→3→2→1→5→6, 用程序实现 非递归可运行代码: #include #include #include typedef struct node { node *next; struct int data; } node; void createList(node { **head, int data) node *pre, *cur, *new; pre cur = = NULL; *head; (cur pre cur != = = NULL) { cur; cur->next; while } new = (node *)malloc(sizeof(node));
new->data new->next = = data; cur; if (pre == NULL) *head = new; else pre->next = new; } void printLink(node { *head) while (head->next printf("%d head = != ", { NULL) head->data); head->next; } int { } node* { } printf("%d\n", head->data); linkLen(node *head) int len = 0; != ++; (head len head = while } NULL) { head->next; return len; reverseK(node *head, int k) int i, len, time, now; len = linkLen(head); if (len < k) { return head; else { time = len / k; } } node *newhead, *prev, *next, *old, *tail;
for (now = old 0, = for (i tail = NULL; now < time; now ++) { head; prev = NULL; i < k; i ++) { head->next; prev; = = 0, next = head->next prev = head = head; next; } if } (now == 0) newhead { = prev; old->next = head; if (tail != NULL) { tail->next = prev; } tail = old; } if (head != NULL) { tail->next = head; } return newhead; } int { main(void) i, int n, node *head, k, data; *newhead; while (scanf("%d %d", &n, &k) != for (i = 0, head = NULL; EOF) < i { n; i ++) { scanf("%d", createList(&head, &data); data); } printLink(head);
newhead = reverseK(head, k); printLink(newhead); } return 0; } 5、利用两个 stack 模拟 queue 剑指 offer 上的原题,九度 oj 有专门的练习,这里贴一下我的 ac 代码: #include #include #include typedef struct stack { int int top; seq[100000]; } stack; /** * 入队操作 * * * */ T = O(1) void pushQueue(stack { *s1, int data) s1->seq[s1->top ++] = data; } /** * 出队操作 * * * */ T = O(n) void popQueue(stack { *s1, stack *s2) if (s2->top > { printf("%d\n", 0) } else { s2->seq[-- s2->top]);
while (s1->top > 0) { s2->seq[s2->top ++] = s1->seq[-- s1->top]; } if (s2->top > 0) printf("%d\n", s2->seq[-- s2->top]); else printf("-1\n"); } } int { main(void) n; data, int stack char str[5]; *s1, *s2; while (scanf("%d", &n) != EOF) { // 初始化 s1 s2 s1->top = = = (stack (stack *)malloc(sizeof(stack)); *)malloc(sizeof(stack)); s2->top = 0; while (n --) { scanf("%s", str); (strcmp(str, "PUSH") 0) { // 入队列 scanf("%d", pushQueue(s1, == &data); data); else { // 出队列 popQueue(s1, s2); if } } } free(s1); free(s2); } return 0; }
6、一个 m*n 的矩阵,从左到右从上到下都是递增的,给一个数 elem,求是否在矩阵中,给 出思路和代码 杨氏矩阵,简单题目: #include #include /** * 有序矩阵查找 * * * */ O(n T = + n) void findKey(int { **matrix, int n, int m, int key) int row, col; for (row = 0, if } } } (matrix[row][col] = - m 1; col < { printf("第%d 行,第%d 列\n", break; row key) == n && col >= 0;) { row + 1, col + 1); else if col (matrix[row][col] -= 1; > key) { else { row += 1; } printf("不存在!\n"); } int { main(void) int i, j, key, n, m, **matrix; // 构造矩阵 scanf("%d matrix = for (i = 0; i matrix[i] for (i = 0; i %d", (int &n, &m); **)malloc(sizeof(int *) * n); < = < i n; (int n; i ++) *)malloc(sizeof(int) * m); ++) { m; j &matrix[i][j]); ++) for (j = j 0; < scanf("%d",
} // 查询数据 while (scanf("%d", &key) != findKey(matrix, n, m, EOF) { key); } return 0; }
分享到:
收藏