蘑菇街2016研发工程师在线编程题

传送门

第一题:

[编程题] 搬圆桌

现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。

输入描述:
一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)
输出描述:
输出一个整数,表示答案
输入例子:
2 0 0 0 4
输出例子:
1

题解转自:ixiaomo

思路很简单,千万别想复杂了

无论圆桌如何移动,都必须在圆桌边缘找一个点旋转。这就表明旋转后的圆心与最初的圆心连线肯定是2r的倍数(两圆心,向x轴或y轴做垂线,能得到一个直角三角形),几倍就表示最终移动了几步。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cmath>
 5
 6 using namespace std;
 7
 8 #define ll long long
 9
10 double r,x[3],y[3],R;
11 int ans;
12
13 void ini(){
14     int i;
15     for(i = 0;i <= 1;i++){
16         scanf("%lf%lf",&x[i],&y[i]);
17     }
18     R = 2 * r;
19     ans = 0;
20 }
21
22 void solve(){
23     double dx,dy;
24     dx = x[0] - x[1];
25     dy = y[0] - y[1];
26     double d2, R2, d;
27     d2 = dx * dx + dy * dy;
28     d = sqrt(d2);
29     ans = (d + 0.5) / R;
30 }
31
32 void out(){
33     printf("%d\n",ans);
34 }
35
36 int main(){
37     while(scanf("%lf",&r) != EOF){
38         ini();
39         solve();
40         out();
41     }
42 }

这题涉及精度问题,下面这个人的解答不错(Zenas):

 1 //当初是在杭电acm的acmcoder网上考的,按照acm的“标准”,while循环输入。
 2 #include <iostream>
 3 #include <cmath>
 4 usingnamespace std ;
 5
 6 int main(int argc, const char * argv[]) {
 7     // insert code here...
 8     int r, x, y, x1, y1;
 9     double length, lx, ly, s;
10     while (cin>>r>>x>>y>>x1>>y1) {
11         lx = (x1-x)>=0 ? (x1-x) : (x-x1);
12         ly = (y1-y)>=0 ? (y1-y) : (y-y1);
13         length = sqrt(lx*lx + ly*ly);
14         s = length/(2*r);
15         int t = (int)s;
16         if (s - t > 0)
17             cout << t+1 <<endl;
18         else
19             cout << t << endl;
20     }
21     return 0;
22 }

第二题:

 1 [编程题] 最大间隔
 2 给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?
 3
 4 输入描述:
 5 第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
 6
 7
 8 输出描述:
 9 输出答案。
10
11 输入例子:
12 5
13 1 2 3 7 8
14
15 输出例子:
16 4

指上弹兵赵小括

1、记录相邻节点之间间隔的最大值maxDis;

2、记录[i - 1]与[i + 1]结点之间的最小值minDis;

3、返回max(maxDis, minDis)

时间: 2024-10-31 10:29:34

蘑菇街2016研发工程师在线编程题的相关文章

网易2019校招C++研发工程师笔试编程题

题目描述: 又到了丰收的季节,恰逢小易去牛牛的果园里游玩. 牛午常说他对整个果园的每个地方都了如指掌,小易不太相信, 所以他想考考牛牛. 在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往 右数第x个苹果是属于哪一堆的. 牛牛觉得这个问题大简单,所以希望你来着他回答. 输入描述: 第一行一个数n(1<=n<=100000) 第二行n个数ai(1<=ai<=1000),表示从左往右数第i堆有多少苹果 第三行一个数m(1<=m<=100000),表示有m次询口.

百度2016研发工程师模拟笔试题

1.下面程序的输出结果是?     #include<iostream.h>    void main(){        int n[][3]={10,20,30,40,50,60};        int (*p)[3];        p=n;        cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;    } A.10

去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码

编程题很简单.整个试卷结构为: 一.问答题: 对前端的理解,了解哪些框架库? 二.在线编程题:身份证分组 如下第一道:身份证分组 三.在线编程题:身份证分组.统计字符.酒店价格(三选二) 如下第二三四道题中三选二作答. 我也搞不懂为什么有两部分编程题~~~下面详细说一说编程题目及JS代码实现: 第一道:身份证分组 代码: 1 var line; 2 while(line = read_line()){ 3 while(line.indexOf(" ") != -1){ 4 line =

2018阿里巴巴在线编程题

在其他博客上看到一道 "2018阿里巴巴在线编程题" 我记得题目大概是这样的:输入数据n(n>=6)代表n个数,从0-9任意输入n个数,然后在n个数选出6个数xx-xx-xx表示 时:分:秒,求出最小时间和最大时间,若时间无效,则输出时间无效,例如: 输入: 6 6 5 4 3 2 1 输出: 123456 235641 输入: 6 9 9 9 9 9 9 输出: 时间无效 看着有点意思,就自己做了一遍,输出格式自己美化了一下,没有严格按照题目要求.代码如下: def find_

搜狐2016研发工程师编程题

1.[编程题]马戏团 搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,小王打听了下了解到, 马戏团正打算出一个新节目“最高罗汉塔”,即马戏团员叠罗汉表演.考虑到安全因素,要求叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等. 团长想要本次节目中的罗汉塔叠的最高,由于人数众多,正在头疼如何安排人员的问题.小王觉得这个问题很简单,于是统计了参与最高罗汉塔表演的所有团员的身高体重,并且很快找到叠最高罗汉塔的人员序列.

2015年阿里巴巴校招研发工程师在线笔试题汇总

在线笔试题汇总 卷一: 1.下面的函数中哪个是系统调用而不是库函数______? printf scanf fgetc read print_s scan_s 2.某足球队有四名外援,分别来自巴西.荷兰.意大利和美国.他们分别擅长前锋.后卫或守门,其中: ① 美国外援单独擅长守门: ② 意大利外援不擅长前锋: ③ 巴西外援和另外某个外援擅长相同的位置: ④ 荷兰外援擅长的位置和巴西外援不同. 以上条件可以推出巴西外援擅长的位置是______. 前锋 守门 后卫 前锋或守门 后卫或守门 前锋或后卫

19届第四范式测试开发工程师校招-编程题

编程题两道,第一道关于SQL的联合查询跟第二排序,第二道关于二维数组. 题目2: 给定一个空的int类型的二维数组array[n][m].按下面的填充规则,请编写一个函数将此二维数组填满并打印出来. 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 输入描述:输入的包括两个正整数,表示二维数组的大小n,m(1<=n,m<=10) 输出描述:打印结果,每行行末无空格. 例1:输入为4 4 输出为 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15

华为2016研发工程师编程题:字符集合

字符集合 输入一个字符串,求出该字符串包含的字符集合 输入描述: 每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写. 输出描述: 每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出. 输入例子: abcqweracb 输出例子: abcqwer 解题 标记法时间复杂度太差了,可以用HashMap增加了空间复杂度 我的标记法 import java.util.Scanner; public class Main{ public s

网易2016研发工程师编程题:路灯

路灯 一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d. 输入描述: 每组数据第一行两个整数n和l(n大于0小于等于1000,l小于等于1000000000大于0).第二行有n个整数(均大于等于0小于等于l),为每盏灯的坐标,多个路灯可以在同一点. 输出描述: 输出答案,保留两位小数. 输入例子: 7 1515 5 3 7 9 14 0