2017网易秋招编程集合
CPP
http://blog.csdn.net/achiberx/article/details/74058208
[编程题]回文序列
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
输入描述:
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50) 第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。
输出描述:
输出一个数,表示最少需要的转换次数
输入例子:
4 1 1 1 3
输出例子:
2
解题思路:
将该序列左右两端同时开始向中间合并。无论怎么样最终会变成一个数字,也只是最坏的一种情况。
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int arr[];
- while(sc.hasNext()){
- int n = sc.nextInt();
- arr = new int[n];
- for (int i = 0; i < n; i++){
- arr[i] = sc.nextInt();
- }
- System.out.println(solve(n, arr));
- }
- sc.close();
- }
- private static int solve(int n, int arr[]) {
- int left = 0;
- int right = n - 1;
- int ans = 0;
- while (left < right){
- if (arr[left] > arr[right]){
- arr[right-1] += arr[right];
- right--; ans++;
- }else if(arr[left] < arr[right]){
- arr[left+1] += arr[left];
- left++; ans++;
- }else{
- left++; right--;
- }
- }
- return ans;
- }
- }
[编程题] 优雅的点
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。
输入描述:
输入为一个整数,即为圆半径的平方,范围在32位int范围内。
输出描述:
输出为一个整数,即为优雅的点的个数
输入例子:
25
输出例子:
12
解题思路:
说白了就是求一个数能否写成另外两个数平方和? 一共有几组呢?
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static int sum = 0;
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int x = 0,y = 0;
- for (int i=1; i*i <= n; i++){
- x = i*i;
- y = (int) Math.sqrt(n - x);
- if (x + y*y == n) {
- sum++;
- }
- }
- System.out.println(sum*4);
- }
- }
[编程题] 跳石板
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板
输入描述:
输入为一行,有两个整数N,M,以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)
输出描述:
输出小易最少需要跳跃的步数,如果不能到达输出-1
输入例子:
4 24
输出例子:
5
解题思路:
基础的动态规划问题
dp[i] 表示走到 i 位置需要的最短步数
在计算的时候,由于我们知道i位置的可以向前走的距离
当 i 位置可以走的时候,计算走到 i + x 位置时候的 最小步数
源代码:
- import java.util.Arrays;
- import java.util.Scanner;
- import java.util.TreeSet;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
- int dp[] = new int[m+1];
- Arrays.fill(dp, Integer.MAX_VALUE);
- dp[n] = 0; // 到达起始位置步数为0步
- for (int i = n; i <= m; i++){
- if (dp[i] == Integer.MAX_VALUE) dp[i] = -1;
- else{
- TreeSet<Integer> list = bcd(i);
- while (!list.isEmpty()){
- int temp = list.pollFirst();
- if (i + temp <= m)
- dp[i+temp] = Math.min(dp[i+temp], dp[i]+1);
- }
- }
- }
- System.out.println(dp[m]);
- }
- /**
- *
- * @author 慕一春
- * @param num
- * @return 一个数的最大公约数集list
- */
- public static TreeSet<Integer> bcd(int num){
- TreeSet<Integer> list = new TreeSet<Integer>();
- int len = (int) Math.sqrt(num);
- for (int i = 2; i <= len; i++){
- if (num % i == 0){
- list.add(i);
- list.add(num/i);
- }
- }
- return list;
- }
- }
[编程题] 暗黑的字符串
BAACAACCBAAA 连续子串"CBA"中包含了'A','B','C'各一个,所以是纯净的字符串
AABBCCAABB 不存在一个长度为3的连续子串包含'A','B','C',所以是暗黑的字符串
你的任务就是计算出长度为n的字符串(只包含'A'、'B'和'C'),有多少个是暗黑的字符串。
输入描述:
输入一个整数n,表示字符串长度(1 ≤ n ≤ 30)
输出描述:
输出一个整数表示有多少个暗黑字符串
输入例子:
2 3
输出例子:
9 21
解题思路:
我们只需要考虑当前字符串最后两个字母的两种状态: 相同,例如:AA等 不相同,例如:AB等
动态规划,dp[i][0] 第i个字母以两相同字母结尾的暗黑字符串,dp[i][1] 第i个字母以两个不同字母结尾的暗黑字符串
状态转移方程式: dp[i][0] = dp[i-1][0] + dp[i-1][1] dp[i][1] = 2 * dp[i-1][0] + dp[i-1][1];
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- if (n == 1){
- System.out.println(3);
- return;
- }
- long dp[][] = new long[n+1][2];
- dp[1][0] = 0; dp[1][1] = 0;
- dp[2][0] = 3; dp[2][1] = 6;
- for (int i = 3; i <= n; i++){
- dp[i][0] = dp[i-1][0] + dp[i-1][1];
- dp[i][1] = 2 * dp[i-1][0] + dp[i-1][1];
- }
- System.out.println(dp[n][0] + dp[n][1]);
- }
- }
[编程题] 数字翻转
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?
输入描述:
输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。
输出描述:
输出rev(rev(x) + rev(y))的值
输入例子:
123 100
输出例子:
223
解题思路:
5分钟调试完,没什么难度。
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String x = sc.next();
- String y = sc.next();
- System.out.println(rev(String.valueOf(rev(x) + rev(y))));
- }
- public static int rev(String str){
- StringBuffer sb = new StringBuffer(str);
- return Integer.parseInt(sb.reverse().toString());
- }
- }
[编程题] 最大的奇约数
现在给出一个N,需要求出 f(1) + f(2) + f(3).......f(N)
例如: N = 7
f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 + 7 = 21
小易计算这个问题遇到了困难,需要你来设计一个算法帮助他。
输入描述:
输入一个整数N (1 ≤ N ≤ 1000000000)
输出描述:
输出一个整数,即为f(1) + f(2) + f(3).......f(N)
输入例子:
7
输出例子:
21
解题思路:
很明显,f(n) 当n为奇数时,f(n) == n。
当n为偶数时,n不断除以2,直到n为奇数记作n',即 f(n) == n' 。
推导状态转移方程式:
f(n)为奇数时, f(n) = f(n-1) + n;
f(n)为偶数时, f(n) = f(n/2) + 1 + 3 + 5 + ... + (n-1) ——> f(n) = f(n/2) + n*n/4 (一张纸,一支笔很快就可以写出方程式。)
源代码:
- import java.math.BigInteger;
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- System.out.println(solve1(n));
- System.out.println(solve2(n));
- }
- private static BigInteger solve2(int n) {
- BigInteger sum = BigInteger.ZERO;
- while (true){
- if (n == 1){
- sum = sum.add(BigInteger.ONE);
- break;
- }
- else if(n % 2 == 1) {
- sum = sum.add(BigInteger.valueOf(n));
- n--;
- }else{
- sum = sum.add(BigInteger.valueOf(n).multiply(BigInteger.valueOf(n)).divide(BigInteger.valueOf(4)));
- n /= 2;
- }
- }
- return sum;
- }
- public static BigInteger solve1(int n) {
- if (n == 1) return BigInteger.ONE;
- if (n % 2 == 1) return solve1(n-1).add(BigInteger.valueOf(n));
- else return solve1(n/2).add(BigInteger.valueOf(n).multiply(BigInteger.valueOf(n)).divide(BigInteger.valueOf(4)));
- }
- }
[编程题] 买苹果
输入描述:
输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果
输出描述:
输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
输入例子:
20
输出例子:
3
解题思路:
水题 ![1,100]的数据量暴力一下就好!
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int r = n / 6;
- int c = n / 8;
- int min = Integer.MAX_VALUE;
- for (int i = 0; i <= r; i++){
- for (int j = 0; j <= c; j++){
- if (i*6 + j*8 == n){
- if (min > i+j) min = i+j;
- }
- }
- }
- if (min == Integer.MAX_VALUE) System.out.println(-1);
- else System.out.println(min);
- }
- }
[编程题] 计算糖果
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
输入描述:
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
输出描述:
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
输入例子:
1 -2 3 4
输出例子:
2 1 3
解题思路:
3个未知数,仅需3个一元一次方程就可以解答。这里多了一个就是一个限制条件而已了。 注意A,B,C都是整数!
源代码:
- import java.util.Scanner;
- /**
- *
- * @author 慕一春
- * @version 1.0.0
- * @filename Main.java
- * @time 2016-9-21 下午2:50:56
- * @copyright(C) 2016
- */
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int a = sc.nextInt();
- int b = sc.nextInt();
- int c = sc.nextInt();
- int d = sc.nextInt();
- if ((a+c)%2!=0 || (b+d)%2!=0) System.out.println("No");
- else{
- int A = (a+c)/2;
- int B = A-a;
- int C = B-b;
- if (B+C == d)
- System.out.println(A+" "+B+" "+C);
- else
- System.out.println("No");
- }
- }
- }
转载于:https://www.cnblogs.com/D-DZDD/p/7350025.html
2017网易秋招编程集合相关推荐
- 吉比特2017年秋招编程题:字符串排序
date:2017/8/27 厦门吉比特网络技术股份有限公司在线笔试 (#isalpha函数判断字母 #isdigit函数判断数字) 输入一串字符串(包含字符和数字)如:sd341a 将字符串进行排序 ...
- 2018网易秋招编程题【彩色砖块】
题目: 小易有一些彩色的砖块.每种颜色由一个大写字母表示.各个颜色砖块看起来都完全一样.现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色.小易想把他所有的砖块排成一行.如果最多存在一对不 ...
- 2021.8.21 网易秋招开发笔试(题目 + java代码)
2021.8.21 网易秋招开发笔试 一.题目: 二.程序 //采用的是深度优先搜索 import java.util.HashMap;public class wangyi {public stat ...
- 2017年秋招美团Java程序员开发,看我如何拿到offer
转载自 2017年秋招美团Java程序员开发,看我如何拿到offer 本人是一名本科毕业非计算机专业的程序员,面了阿里,结果没过,最后面上了美团,热乎乎的面经,昨天面的美团,虽然面完了HR面,但是感 ...
- 2018深信服java笔试题,深信服2018秋招编程题
深信服2018秋招编程题 深信服2018秋招编程题 第一题: 其中,reverse函数的代码实现如下: 1. unsigned int reverse(unsigned int num) { unsi ...
- 京东2018秋招编程题
C++开发工程师 京东 2018秋招编程题 (代码后续更新...) 1.神奇数 将一个数n的各数位分成两部分,两部分之和相等,则称这个数为神奇数.比如242分成[2,2].[4].输入一个范围[l, ...
- 滴滴2018秋招编程题
滴滴 2018秋招 编程题 1.寻找丑数 丑数的定义是,只包含因子2.3和5的数称作丑数.比如6和8是丑数,14不是丑数,因为含有因子7.输入一个整数n,输出第n个丑数.我们认为第一个丑数是1. 解析 ...
- 2021网易秋招笔试题(Android开发)
网易笔试题(2021.08.08) 校招的笔试题通常是4道编程题,时间为2个小时,每题25分. 2021秋招笔试题总结如下,包含问题和代码实现. 题1:查找关键词 查找关键词(单词在文章中出现频率&g ...
- 微策略2017年秋招线下笔试+技术面+在线测评+主管面总结
1 前言 微策略可能在国内的知名度比较小,它是一家总部在美国,在杭州设立研发中心,主要做智能商用软件的外企.更多的信息,请自行搜索. 我是17年10月份面试微策略,然后拿到的开发(前端方向)的offe ...
最新文章
- python圣诞树代码成品图片动态_Python 圣诞树和樱花树源码
- asp.net 漂亮搜索框_推荐4款影视搜索工具,十一假期让你看剧看到爽
- 混迹于IT纯屌界中独一无二的丸子
- 生死6小时!!!!!!!!!!!!!!!!1
- 数据分箱技术在Python中实现
- 用C++实现二分查找
- etl数据抽取工具_数据同步工具ETL、ELT傻傻分不清楚?3分钟看懂两者区别
- Servlet 开发【07】Servlet两种跳转
- SAP License:SAP用户权限
- 面向对象封装的web服务器
- JAVA多线程之synchronized和volatile实例讲解
- win32实现两个透明窗口联动
- 微信api中转站(用python搭建flask服务器)
- mysql jdbc密码密文_druid配置数据库连接使用密文密码
- brew install速度过慢
- 终极 Shell on-zshrc
- 合唱队形(NOIP)
- 论文笔记之:Co-saliency Detection via A Self-paced Multiple-instance Learning Framework
- 设计模式回顾——模板模式(C++)
- android m壁纸驱动之家,微软打造的良心壁纸App,仅4.2M
热门文章
- Google Assistant SmartHome 入门指南
- yjk只算弹性的不计算弹塑性_ABAQUS弹塑性时程分析注意事项 -
- linux trash命令,Linux/Ubuntu: 使用 trash-cli 防止 rm 命令误删除重要文件
- 南华大学计算机学院足球队,【体育学院】南华大学“新生杯”足球赛圆满落幕...
- 计算机毕业设计基于asp.net校园足球赛事管理系统
- 驰网云数据库MySQL SQL Server
- 基于Matlab的MIMO通信系统仿真_Simulink实现
- C语言输入不定长度的数组,不输入数组长度
- 纸板表的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 深入理解同步工具类,看这篇就够了