目录

  • 第一题
    • 题意
    • 思路
    • 代码
  • 第二题
    • 题意
    • 思路
    • 代码
  • 第三题
    • 题意
    • 思路
    • 代码
  • 第四题
    • 题意
    • 思路
    • 代码

笔试共有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暑期实习生算法岗笔试题相关推荐

  1. 【字节跳动2019年】算法岗笔试题

    题目描述: 字节跳动大街上有许多商铺,其中只有一部分为顾客开放厕所.街道办想提供一项便民服务, 在家商铺门口放一个标志,写明距离当前商铺最近的厕所有几个商铺的距离.如果当前商铺就有厕所,则标志为0.请 ...

  2. 字节跳动python面试题_字节跳动2019两道春招笔试题python解法

    (一)万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现一个发现拼 ...

  3. 网易游戏2019暑期实习开发岗笔试题

    目录 第一题 题意 思路 第二题 题意 思路 第三题 题意 思路 第四题 题意 思路 网易笔试和百度撞车,共有4道编程题,我是听其他答网易的同学说的题意,想了想思路. 第一题 题意 签到题,给出一句话 ...

  4. 美团点评实习生算法岗笔试题 (java) 2020.04.23场

    T1 幸运星 题目描述 在观星的时候,一种常用的方式是划出类似于正方形的区域内,确定其中所有星星的坐标. 现在我们在星空(一个无限大的二维平面)上简历坐标系.由于星星很小,我们忽略它的面积,认为每一个 ...

  5. 字节跳动2019春招算法题

    字节跳动2019春招算法题 1.总结 难度:容易到中等. 一些题出的太烂,不给数据范围,而且内存设置有问题,如果是刷题不建议刷. 2.题目 (1) 简单字符串模拟. #include<bits/ ...

  6. 牛客 腾讯算法岗 笔试题整理

    牛客腾讯笔试题真题题解 格雷码 # -*- coding:utf-8 -*-class GrayCode:def getGray(self, n):GrayList = []tmp_list_0, t ...

  7. 360企业安全2019暑期实习算法岗笔试

    目录 选择题 编程题 第一题 题意 思路 代码 第二题 题意 思路 代码 360好像之前有一轮笔试面试,不过我没投,错过了.前几天投的,今天(2019.4.24)晚上7点笔试,共90分钟,20个选择题 ...

  8. 字节跳动面经——实习算法岗

    目录 一面 二面 三面 一面 一面是一个特别和蔼的面试官,我们用Q来代表面试官.A表示我. A:面试官,你好 Q:你好,先坐一下自我介绍吧 A:好的,balabala.(这个地方大家千万不要紧张,放平 ...

  9. 京东2019校招算法岗笔试题

    注:图片来源于网络.利用两个数组进行映射,使得s[i] = num, t[i] = num.代码未完全测试,仅供参考. #include<iostream> #include<vec ...

最新文章

  1. linux mysql 升级_linux升级mysql
  2. hdu 5020 求三点共线的组合数(容器记录斜率出现次数)
  3. kafka的topic命名技巧
  4. mybaitis 通过Mapping 实现多表查询
  5. 【杂谈】购言有三签名纪念版书籍,送1~3副有三AI学习扑克牌
  6. 推荐系统炼丹笔记:边缘计算+奉送20个推荐系统强特
  7. C#编写串口通信程序(转)
  8. Redis(案例五:Set数据)
  9. 编程语言难度排名_编程语言TOP10!该如何选择适合自己的?
  10. elasticjob 分片策略
  11. _mount_vendor
  12. 用DrawerLayout(Support Library 4提供)开发侧边栏,有没有什么方法关闭手势控制?...
  13. HTML静态网页作业-餐饮美食网页(HTML+CSS+JavaScript)
  14. c语言的表示指数用什么符号,c语言的指数符号
  15. 基于555定时器的呼吸灯电路
  16. 谷歌的Pixel Watch学习能力爆表,他能从手机中学到什么呢?
  17. md语法语法_PHP –语法概述
  18. 布莱克斯科尔斯模型(五) 方程求解过程
  19. Android学习笔记之Android平台架构和特性
  20. Java实现判断叶子节点_寻找二叉树最远的叶子结点(实例讲解)

热门文章

  1. 用delphi操作mapinfo
  2. Asp.net 中使用单独类文件
  3. CoreNLP请求超时 runtime out
  4. docker 必然用到的一些指令
  5. ThreadLocal 和 InheritableThreadLocal
  6. Java的Map接口,以及Collection和Collections的区别
  7. Java8--Lambda表达式对List集合操作
  8. 日常生活小技巧 -- 玩转 PDF
  9. pat天梯赛L2-010. 排座位
  10. android上垂直跑马灯,android textview 垂直滚动and水平跑马灯