2017互联网笔试题汇总
来源:互联网 发布:mysql insert 编辑:程序博客网 时间:2024/06/08 01:20
跑步(奇虎360 2017春招真题)
题目描述:小明同学喜欢体育锻炼,他常常去操场上跑步。跑道是一个圆形,在本题中,我们认为跑道是一个半径为R的圆形,设圆心的坐标为原点(0,0)。
小明跑步的起点坐标为(R,0),他沿着圆形跑道跑步,而且一直沿着一个方向跑步。回到家后,他查看了自己的计步器,计步器显示他跑步的总路程为L。
小明想知道自己结束跑步时的坐标,但是他忘记自己是沿着顺时针方向还是逆时针方向跑的了。他想知道在这两种情况下的答案分别是多少。
输入:
输入两个整数L,R (1<=L,R<=100)。
输出:
输出两行,每行两个数,用空格隔开。第一行的两个数为顺时针情况下结束位置的坐标,第二行是逆时针情况下结束位置的坐标。所有数据小数点后四舍五入保留3位。
样例输入
1 2
样例输出
4
思路:直接计算即可。
import java.util.*;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int L = cin.nextInt(); int R = cin.nextInt(); double theta = L / (R * 1.0); double x = R * Math.cos(theta); double y = - R * Math.sin(theta); double xReverse = R * Math.cos(2*Math.PI-theta); double yReverse = - R * Math.sin(2*Math.PI - theta); System.out.println(String.format("%.3f", x) + " " + String.format("%.3f", y)); System.out.println(String.format("%.3f", xReverse) + " " + String.format("%.3f", yReverse)); } }}
剪气球串(奇虎360 2017春招真题)
题目描述:小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
注意每种剪法需满足最后的子串中气球颜色各不相同(如果满足该条件,允许不剪,即保留原串)。两种剪法不同当且仅当存在一个位置,在一种剪法里剪开了,而在另一种中没剪开。详见样例分析。
输入
第一行输入一个正整数n(1≤n≤100000),表示气球的数量。
第二行输入n个整数a1,a2,a3…an,ai表示该气球串上第i个气球的颜色。对于任意i,有1≤ai≤9。
输出
输出一行,第一行输出一个整数,表示满足要求的剪法,输出最终结果除以1000000007后的余数。
样例输入
3
1 2 3
样例输出
4
思路:动态规划。由于一共9种不同的元素,所以前i个气球剪法个数dp[i]最多等于dp[i-1] + dp[i-2] + … dp[i-9]。若第i个气球可以与第i-1个气球组成子串,那么dp[i] = dp[i-1],若第i个气球可以与第i-1、第i-2个气球组成子串,那么dp[i] = dp[i-1] + dp[i-2],依次类推。
import java.util.*;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int n = cin.nextInt(); int[] a = new int[n]; for(int i=0; i<n; i++) { a[i] = cin.nextInt(); } int[] dp = new int[n+1]; dp[0] = 1; for(int i=1; i<=n; i++) { Set<Integer> set = new HashSet<>(); for(int j=i; j>0; j--) { if(set.contains(a[j-1])) break; set.add(a[j-1]); dp[i] += dp[j-1]; dp[i] %= (1e9 +7); } } System.out.println((int)(dp[n] % (1e9 + 7))); } }}
分金子(奇虎360 2017春招真题)
题目描述:A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方,经过谈判后,双方同意用一个公平的方式来处理这片金矿。处理的规则如下:他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。 马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?(两伙马贼均会采取对己方有利的策略)
输入
测试数据包含多组输入数据。输入数据的第一行为一个正整数T(T<=20),表示测试数据的组数。然后是T组测试数据,每组测试数据的第一行包含一个整数n,下一行包含n个数(n <= 500 ),表示每段金矿的含金量,保证其数值大小不超过1000。
输入
测试数据包含多组输入数据。输入数据的第一行为一个正整数T(T<=20),表示测试数据的组数。然后是T组测试数据,每组测试数据的第一行包含一个整数n,下一行包含n个数(n <= 500 ),表示每段金矿的含金量,保证其数值大小不超过1000。
样例输入
2
6
4 7 2 9 5 2
10
140 649 340 982 105 86 56 610 340 879
样例输出
Case #1: 18 11
Case #2: 3206 981
思路:动态规划。先手每次可以选择从最左边或者最右边取金子,最优解就是刚拿的金子加上剩下的金子的最优解的最大值。
import java.util.*;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int T = cin.nextInt(); for(int i=0; i<T; i++) { int n= cin.nextInt(); int[] a = new int[n+1]; int[] sum = new int[n+1]; for(int j=0; j<n; j++) { a[j+1] = cin.nextInt(); sum[j+1] = sum[j] + a[j+1]; } int[][] dp = new int[n+2][n+2]; for(int l=0; l<n; l++) { for(int j=1; j<=n-l; j++) { dp[j][j+l] = Math.max(sum[j+l]-sum[j] - dp[j+1][j+l] + a[j], sum[j+l-1]-sum[j-1] - dp[j][j+l-1] + a[j+l]); } } System.out.println("Case #" + (i+1) + ": " + dp[1][n] + " " + (sum[n] - dp[1][n])); } }}
- 2017互联网笔试题汇总
- 互联网蜗牛求职记--笔试面试汇总
- 网易互联网2017,3月笔试题
- 关于互联网笔试题
- 2017华为实习生笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- c++笔试题汇总
- jeesite快速开发平台(五)---内置组件的应用
- B
- 并查集- Union-Find
- c#自定义泛型列表
- React Native 热更新实现
- 2017互联网笔试题汇总
- 《ACM程序设计》书中题目--problem v
- 【程序1】组成互不相同且无重复数字的三位数
- Eclipse插件安装4种方法
- 大数据工程师(开发)面试系列(7)
- 2017Google Study Jams之L1Android Studio的安装与生日贺卡的实现
- C++ goto使用例子
- return false影响事件冒泡
- AngularJS的路由 系列