2017年腾讯秋招软件开发笔试编程题.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2017 年腾讯秋招软件开发笔试编程题回忆版 (所有题目大致描述如下,并非完整的题目回忆,但意思大致一样) 1、又一个魔法城市,城市里面有 n 个魔法城堡,序号为 0,1,2。。。n-1;魔法城堡之间都有路径相连;魔法城堡两两之间的到达的距离不同,因此所需时间也可能不会相同。如魔法城堡 0 到魔法城堡 2 需要耗时 4 小时;现,小明想从魔法城堡 0 到魔法城堡 1,他想知道需要花费多少时间;为了快速到达,有一魔法扫把,魔法扫把使用次数有限,使用一次,可以将某一段间的时间减半;求小明从魔法城堡 0 到魔法城堡 1 花费的最小时间,精确到一位小数。输入:总共 n+1 行; 第一行,魔法城堡数 n;魔法扫把能够使用的次数 k;第二行到第 n 行为魔法城堡之间到达需要的时间; 输出:从魔法城堡 0 到魔法城堡花费的最短时间:t,精确到小数点后一位。 示例: 输入: 3 2 094 904 440 (注:腾讯这里输入的 094,904,440,是以字符串的形式输入的) 输出: 4.0 个人大致思路: 利用 Dijkstra 最短路径求法;记录到魔法城堡 1 的最短路径上每一个前驱节点和 对应的距离;然后对每段的距离进行降序排序;之后把魔法扫把使用在所耗时最 多的段中。如 0 到 1 的最短路径为 0 到 2,消耗为 4;2 到 1 消耗为 3;魔法扫把 能使用 1 次;那么把这一次机会使用在 0 到 2 这一段路径上;那么最后最短时间 即为:2+3=5.0; 代码实现为: #include iostream #include vector #include string #include map #include set #include cstring #include math.h #include algorithm using namespace std; #define MIN 99999 vectorintdijkstra_shortpath(vectorvectorint arcs, intednode) { int size = arcs.size(); vectorintdist(size); //保存当前最短路径 vectorint path(size); //保存前驱节点 vectorint S(size); //保存已经找到最短路径的节点 //初始化 for (size_ti = 0; i size; i++) { dist[i] = arcs[0][i]; S[i] = 0; path[i] = 0; } S[0] = 1, path[0] = -1; //进行循环更新每次遍历每个节点的最短路径长度 for (inti = 1; i size; i++) { intnmin = MIN, mi = 1; for (int j = 1; j size; j++) { if (!S[j] dist[j] nmin) { mi = j; nmin = dist[j]; } } cout min index= mi ; paht=nminendl; S[mi] = 1; //更新每个节点的最短路径长度 for (int j = 1; j size; j++) { if (!S[j] dist[mi] + arcs[mi][j] dist[j]) { dist[j] = dist[mi] + arcs[mi][j]; path[j] = mi; //保存节点 j 最短路径的前驱 mi } } } //输出每个节点的 for (inti = 0; i size; i++) { cout [pre= path[i] ,len= dist[i] ]; ; } coutendl; vectorint res; while (path[ednode] != -1) { res.push_back(arcs[path[ednode]][ednode]); cout [pre= path[ednode] ;len= arcs[path[ednode]][ednode] ];; ednode = path[ednode]; } coutendl; return res; } int main(intargc,char **argv) { int n = 0, k = 0; vectorint res; while (cin nk) { vectorvectorint nodes; string path; for (inti = 0; i n; i++) { cin path; vectorint node(n); for (inti = 0; i n; i++) node[i] = path.at(i) - 0

文档评论(0)

mmmttt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档