搜狗2016年校招笔试编程题记录+总结
不同的职位题目应该不一样,我遇到的2道题,其一是搜狗问答中的作弊判断,其二是矩阵计算。
1. 搜狗问答作弊判断
简单来说,就是存在作弊刷积分的情况,所以需要判断哪些人作弊,判断遵循下面2个原则:
(A) 两个人互问互答刷分,即A提的一个问题被B答了,B题的一个问题也被A答了,则这二人被判为作弊;
(B) 共同作弊刷分,即C提了一个问题,回答者有多位,其中包括已经被判为作弊的A和B,则C也被判为作弊。
嗯,大致就是这样,具体细节可能有出入。
输入类似于下面的,第一个数字为提问者id,后面的为回答者的id:
101 102
103 101 104 102
102 101
105 107 108
输出为作弊者数目和id,以上面那个输入为例:
3
101
102
103
其中101和102为互问互答作弊,而103属于共同作弊刷分。
这道题目前没有什么特别好的思路,似乎是要用到图的算法?总之先记录在这里,之后再寻找解决方案。
2. 矩阵计算
给出一个n行m列的矩阵A,定义x[i][j]为第i行和第j列中,除了A[i][j]这个位置以外的所有数的乘积(说白点就是选出第i行,抠掉第j个位置,选出第j列,抠掉第i个位置,然后把剩下的数相乘),求这个矩阵最大的x[i][j]。
输入全为非负数,第一行2个数是矩阵行数和列数,之后是矩阵本身(考题的例子忘了,于是随便写一个):
3 3
1 2 3
4 5 6
7 8 9
输出是一个数:
1008
嗯,一道很简单的题,个人思路是用2个数组pro_h[n]和pro_v[m],分别存下各行的乘积和各列的乘积,然后通过
x[i][j] = pro_h[i] * pro_v[j] / A[i][j] / A[i][j]
计算结果。在这里贴一下自己完整的c代码
#include <stdio.h>
#include <stdlib.h>int main(void)
{int n, m;scanf("%d%d", &n, &m);int total_num = n * m;int *mat = (int *)malloc(total_num * sizeof(int));/* read matrix */int i, j;for (i = 0; i < total_num; i++)scanf("%d", &mat[i]);/* calculate product for each row and each column */long *pro_h = (long *)malloc(n * sizeof(long));long *pro_v = (long *)malloc(m * sizeof(long));/* n rows */for (i = 0; i < n; i++) pro_h[i] = 1;for (i = 0; i < n; i++){int begin_index = i * m;for (j = 0; j < m; j++)pro_h[i] *= mat[begin_index + j];}/* m columns */for (j = 0; j < m; j++) pro_v[j] = 1;for (j = 0; j < m; j++){for (i = 0; i < n; i++)pro_v[j] *= mat[i * m + j];}/* calculate x[i][j] and find max value */long max_value = 0;for (i = 0; i < n; i++){int begin_index = i * m;for (j = 0; j < m; j++){int v_ij = mat[begin_index + j];long x_ij = pro_h[i] * pro_v[j] / v_ij / v_ij;if (max_value < x_ij)max_value = x_ij;}}free(mat);free(pro_h);free(pro_v);printf("%ld\n", max_value);return 0;
}
思路和实现都挺简单的,但做的时候稍微有点慌,于是循环中计算数组下标时把计算写错了,用一维数组替代二维数组计算时,第(i, j)个位置的下标是
index_ij = i * m + j
然而我全部写成了
index_ij = i * n + j
所以就只有方矩阵的计算是正确的,笔试时被提示只有20%的测试通过,当时百思不得其解,考完了仔细复查才发现这问题,一失足成千古恨…
总结:
搜狗在基础编程知识题全部是c++,因而没怎么写过c++的自己做起来比较吃力,以后得补补了;
数据结构的题,比起纯理论更侧重于应用,比如给出一定情景,让你选择适用的数据结构等,还是比较有趣的,相对来说比较简单;
research的题很难,虽然之前在百度实习时搞过机器学习,觉得对大部分常用算法多多少少应该都有了解,结果还是被各种没见过的名词打脸orz;
问答题是算法复杂度分析,搜索查找相关的,觉得这方面以后也有必要看看啊orz;
编程题老实说应该不算太难,但自己一方面经历不够,一方面又过度依赖Python,在被时间催促且没有熟知的语言的情况下,还是慌了,果然还是太嫩了啊……
每做一次笔试确实都会有不少收获,再接再厉吧。
搜狗2016年校招笔试编程题记录+总结相关推荐
- 魔法币 java_网易2018校招笔试编程题-魔法币 java实现
魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...
- 搜狗2016校园招聘之编程题解析-大数据开发
搜狗2016校园招聘之编程题解析-大数据开发 解题思路: 使用JDK中的Point2D类,该类定义了坐标系空间中的一个点 Point2D是一个抽象类,但是在该类内部定义了静态的Double类,并且Do ...
- 华为2020校招笔试编程题 看这篇就够了(上)
背景 近日一位在华为的师兄整理了一份内部的提纲给我们,想着以后肯定不会去华为,于是乎分享给大家,看看菊花厂今年的笔试题目是什么样子的. 编程题范围 这好像来自一个华为内部的文档,据说今年华为内部也在进 ...
- 奇安信2021年校招笔试编程题
< 2020年9月12日奇安信笔试编程第一题 > <java实现获取数组中的连续子数组> 1. 题目信息 2. 参数要求 3. 解题思路 该题获取糖果可以分解为两个部分: (1 ...
- 网易2020校招笔试编程题回顾
把今天的记忆里面的笔试题的情况梳理一下,投递的是算法工程师: 题型总共分为选择题10*1 编程题10.20.20.30 问答题5*2 编程题: 1.倒数排序:给你一个数n,以及1-n的一个排列,让 ...
- 2020秋招——XX校招笔试编程题:回文串
回文串判断&打印给定字符串中的所有回文串 笔试时是纸质的,记错了indexOf()函数和charAt()函数,重大失误emmm,这样逻辑虽然都对了还是要gg,ww,反省中... 回文串:aba ...
- 美团2021校招笔试-编程题-第10场
链接:淘汰分数_美团笔试题_牛客网 来源:牛客网 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2-.a_n,小美作为比赛的裁判希望设定一个分数线m,使得所 ...
- 美团2021校招笔试-编程题(通用编程试题,第9场)
第一题题目没看懂 团的蛋糕铺长期霸占着美团APP中"蛋糕奶茶"栏目的首位,因此总会吸引各路食客前来探店. 小团一天最多可以烤n个蛋糕,每个蛋糕有一个正整数的重量. 早上,糕点铺已经 ...
- 2018 完美世界校招笔试编程题(Java)
01背包简单题,只不过要用Java写,写了比较久一点 import java.util.Scanner; public class Main {public static void main(Stri ...
最新文章
- LoadRunner的参数化功能分享
- Win64 驱动内核编程-10.突破WIN7的PatchGuard
- 去培训机构参加IT培训值不值
- SpringCloud(六) Hystrix入门
- hbase命令行演示
- 《NoSQL权威指南》导读
- pthread_attr_init线程属性
- C语言const易错点
- TensorFlow第九步CNN BP算法学习
- 安装Cocoapods,以及其中出现的问题
- 腾讯内部转岗_腾讯微博即将关停,网友:竟然还活着?
- 基于Python的心电信号检测与处理
- 保姆级教学:手把手教你如何分析研报!
- oracle.exe占用cpu太高,360tray.exe占用CPU过高,怎么办
- 使用java实现简单五子棋
- 测试不同体重体型软件样子的,hikaku-sitatter身高软件,一键测试自己的体型
- ARFoundation
- TVS管的参数理解与选型
- 未来可期(关于高考和现在处境的看法)
- animation动画几种效果