字节跳动2019暑期实习生算法岗笔试题
目录
- 第一题
- 题意
- 思路
- 代码
- 第二题
- 题意
- 思路
- 代码
- 第三题
- 题意
- 思路
- 代码
- 第四题
- 题意
- 思路
- 代码
笔试共有4道编程题,每道题20分,两个小时。这个题感觉比腾讯的简单一点。以下内容的编写全凭记忆和个人理解,如有什么不对的地方,希望大家见谅。
第一题
题意
有一个人用一张1024元的纸币购买价值n元的商品,卖家用四种硬币找零,分别是1、4、16、64,问卖家找零最少需要多少个硬币。
思路
将硬币面值从小到大排序,计算即可。
代码
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<string>using namespace std;int main()
{int n ;while(scanf("%d",&n)!=EOF){int rec = 1024 - n;int num64 = rec / 64;rec = rec - 64*num64;int num16 = rec / 16;rec = rec - 16*num16;int num4 = rec / 4;rec = rec - 4*num4;int num1 = rec / 1;rec = rec - 1*num1;printf("%d\n",num64+num16+num4+num1);}return 0;
}
第二题
题意
有一个程序员写了个自动处理字符串的代码,规则有两条:①如果有aabb型子串,改为aab;②如果有ccc型子串,改为cc。让我们复现程序员的代码。
思路
模拟题,我的思路是将字符串中不符合规则的位置用字符’@'代替,最后输出的时候忽略这些位置即可。
代码
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<string>using namespace std;char s[8000000];int main()
{int t;scanf("%d",&t);while(t--){scanf("%s",s);int len = strlen(s);for(int i = 0 ; i < len; ){int next1 = i+1;while(s[next1] == '@' && next1<len)++next1;int next2 = next1+1;while(s[next2] == '@' && next2<len)++next2;int next3 = next2+1;while(s[next3] == '@' && next3<len)++next3;if(s[i]==s[next1] && s[next1]==s[next2]){s[i] = '@';i = i+1;continue;}else if(s[i]==s[next1] && s[next2]==s[next3]){s[next2] = '@';continue;}else{i = i+1;continue;}}for(int i=0;i<len;++i)if(s[i]!='@')printf("%c",s[i]);printf("\n");}return 0;
}
第三题
题意
老师要给一群学生根据他们的成绩发奖品,学生们围在一个圆桌周围,每个人都有自己的成绩。发奖品的规则是:①每个学生都至少有一个奖品;②如果某学生比左右邻座的学生成绩好,那他应收到比他们更多的奖品。问:老师至少需要准备多少个奖品。
思路
按照成绩从小到大排序,依次发奖品即可。这里用到了结构体排序。
代码
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<string>using namespace std;int num[100000+10];struct TMP
{int num,ll,rr,rec;int pos;
}tmp[100000+10],org[100000+10];int cmp(TMP a, TMP b)
{return a.num < b.num;
}int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=0;i<n;++i){scanf("%d",&tmp[i].num);if(i == 0){tmp[i].ll=n-1;tmp[i].rr=1;}else if(i == n-1){tmp[i].ll=n-2;tmp[i].rr=0;}else{tmp[i].ll=i-1;tmp[i].rr=i+1;}tmp[i].rec=1;tmp[i].pos=i;org[i].rec = tmp[i].rec;org[i].ll = tmp[i].ll;org[i].rr = tmp[i].rr;org[i].num = tmp[i].num;}sort(tmp, tmp+n, cmp);
// for(int i=0; i<n; ++i)
// printf("%d %d %d %d %d\n",tmp[i].pos, tmp[i].num, tmp[i].ll, tmp[i].rr, tmp[i].rec);for(int i=0; i<n; ++i){int pos = tmp[i].pos;int should_rec = org[pos].rec;if(org[pos].num > org[org[pos].ll].num)should_rec = max(should_rec, org[org[pos].ll].rec+1);if(org[pos].num > org[org[pos].rr].num)should_rec = max(should_rec, org[org[pos].rr].rec+1);org[pos].rec = should_rec;//printf("%d %d %d %d %d\n",org_pos, tmp[i].num, tmp[i].ll, tmp[i].rr, tmp[i].rec);}int ans = 0;for(int i=0; i<n; ++i){//printf("%d ",org[i].rec);ans += org[i].rec;}printf("%d\n",ans);}return 0;
}
第四题
题意
有n根绳子,给出每根的长度。现在要求从这n根绳子中剪出m根等长的绳子(注:不能拼接),问等长绳子最长多长。
思路
等长绳子最短为0,最长肯定不超过n根绳子中最长的绳子长度,所以将左端点设置为0,右短点设置为最长绳长,二分+判断,就可以了。需要注意二分的终止条件那里,精度不能设置的太高,否则会WA,设置成题意中的0.01即可,或者0.001。
代码
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<string>using namespace std;int num[100000+10];
int n,m;int _check(double _need)
{int ans = 0;for(int i=n;i>=1;--i){double tmp = num[i]*1.0;ans = ans + (tmp/_need);}if(ans >= m)return 1;elsereturn 0;
}int main()
{while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;++i)scanf("%d",&num[i]);sort(num+1,num+1+n);double ll = 0;double rr = num[n];while((rr-ll) > 0.001){double mm = (ll+rr)/2;if(_check(mm))ll = mm;elserr = mm;}printf("%.2f\n", ll);}return 0;
}
字节跳动2019暑期实习生算法岗笔试题相关推荐
- 【字节跳动2019年】算法岗笔试题
题目描述: 字节跳动大街上有许多商铺,其中只有一部分为顾客开放厕所.街道办想提供一项便民服务, 在家商铺门口放一个标志,写明距离当前商铺最近的厕所有几个商铺的距离.如果当前商铺就有厕所,则标志为0.请 ...
- 字节跳动python面试题_字节跳动2019两道春招笔试题python解法
(一)万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现一个发现拼 ...
- 网易游戏2019暑期实习开发岗笔试题
目录 第一题 题意 思路 第二题 题意 思路 第三题 题意 思路 第四题 题意 思路 网易笔试和百度撞车,共有4道编程题,我是听其他答网易的同学说的题意,想了想思路. 第一题 题意 签到题,给出一句话 ...
- 美团点评实习生算法岗笔试题 (java) 2020.04.23场
T1 幸运星 题目描述 在观星的时候,一种常用的方式是划出类似于正方形的区域内,确定其中所有星星的坐标. 现在我们在星空(一个无限大的二维平面)上简历坐标系.由于星星很小,我们忽略它的面积,认为每一个 ...
- 字节跳动2019春招算法题
字节跳动2019春招算法题 1.总结 难度:容易到中等. 一些题出的太烂,不给数据范围,而且内存设置有问题,如果是刷题不建议刷. 2.题目 (1) 简单字符串模拟. #include<bits/ ...
- 牛客 腾讯算法岗 笔试题整理
牛客腾讯笔试题真题题解 格雷码 # -*- coding:utf-8 -*-class GrayCode:def getGray(self, n):GrayList = []tmp_list_0, t ...
- 360企业安全2019暑期实习算法岗笔试
目录 选择题 编程题 第一题 题意 思路 代码 第二题 题意 思路 代码 360好像之前有一轮笔试面试,不过我没投,错过了.前几天投的,今天(2019.4.24)晚上7点笔试,共90分钟,20个选择题 ...
- 字节跳动面经——实习算法岗
目录 一面 二面 三面 一面 一面是一个特别和蔼的面试官,我们用Q来代表面试官.A表示我. A:面试官,你好 Q:你好,先坐一下自我介绍吧 A:好的,balabala.(这个地方大家千万不要紧张,放平 ...
- 京东2019校招算法岗笔试题
注:图片来源于网络.利用两个数组进行映射,使得s[i] = num, t[i] = num.代码未完全测试,仅供参考. #include<iostream> #include<vec ...
最新文章
- linux mysql 升级_linux升级mysql
- hdu 5020 求三点共线的组合数(容器记录斜率出现次数)
- kafka的topic命名技巧
- mybaitis 通过Mapping 实现多表查询
- 【杂谈】购言有三签名纪念版书籍,送1~3副有三AI学习扑克牌
- 推荐系统炼丹笔记:边缘计算+奉送20个推荐系统强特
- C#编写串口通信程序(转)
- Redis(案例五:Set数据)
- 编程语言难度排名_编程语言TOP10!该如何选择适合自己的?
- elasticjob 分片策略
- _mount_vendor
- 用DrawerLayout(Support Library 4提供)开发侧边栏,有没有什么方法关闭手势控制?...
- HTML静态网页作业-餐饮美食网页(HTML+CSS+JavaScript)
- c语言的表示指数用什么符号,c语言的指数符号
- 基于555定时器的呼吸灯电路
- 谷歌的Pixel Watch学习能力爆表,他能从手机中学到什么呢?
- md语法语法_PHP –语法概述
- 布莱克斯科尔斯模型(五) 方程求解过程
- Android学习笔记之Android平台架构和特性
- Java实现判断叶子节点_寻找二叉树最远的叶子结点(实例讲解)