爱奇艺2018春招Java工程师编程题题解
字典序最大子序列
题目描述
对于字符串a和b,如果移除字符串a中的一些字母(可以全部移除,也可以一个都不移除)就能够得到字符串b我们就称b是a的子序列。
例如."heo"是"hello"的子序列,而"xl"不是。
对于给定的一个字符串s,请计算出s的字典序最大的子序列。
输入描述:
输入包括一行,一个字符串s,字符串a长度Length(1 <= 1ength <= 50).s中每个字符都是小写字母
输出描述:
输出一个字符串,即a的字典序最大的子序列。
示例
输入
test
输出
tt
代码实现
package aiqiyi.demo1; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); char[] charArray = str.toCharArray(); int maxPos = ; StringBuffer sb = new StringBuffer(); while (maxPos < charArray.length) { int maxVlue = Integer.MIN_VALUE; for (int i = maxPos; i < charArray.length; i++) { if (charArray[i] > maxVlue) { maxVlue = charArray[i]; maxPos = i; } } sb.append((char) maxVlue); maxPos++; } System.out.println(sb.toString()); } }
三个整数
题目描述
牛牛有三个整数X, Y, Z.牛牛现在要使用若干次操作让X, Y, Z变为
相等,每次操作牛牛有两种操作类型可选
操作1:从X, Y, Z中选择两个数,都加1
操作2:从X, Y, Z中选择一个数,加2
牛牛已经证明了使用若干次这两种操作一定可以让三个整数变为
相等,请你帮他计算一下最少需要多少次操作.
输入描述:
输入包括三个整数A, B, C(0 < A , B , C < 100)。
输出描述:
输出一个整数,表示最少需要的操作次数.
示例
输入
2 5 4
输出
2
代码实现
package aiqiyi.demo2; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] arr = new int[]; for (int i = ; i < arr.length; i++) { arr[i] = scanner.nextInt(); } Arrays.sort(arr); if ((arr[] - arr[] + arr[] - arr[]) % == ) { System.out.println((arr[] - arr[] + arr[] - arr[]) / ); } else { System.out.println((arr[] - arr[] + arr[] - arr[] + ) / ); } } }
牛牛配糖果
题目描述
牛牛有n种糖果,每种糖果都有足够多,现在牛牛想用这些糖果组成一些糖果盒.
每个糖果盒内放m个糖果,对于一个糖果盒牛牛希望第种糖果的数量不能少于li颗,也不能多于ri颗.
满足条件的糖果盒组成方案可能会有很多,牛牛希望你帮他计算一共有多少种糖果盒的拼凄方案.
对于两种方案,当有任意一种糖果个数不同,就视为两种不同方案.
输入描述:
输入包括n+1行。 第一行包括两个正整数(1<=n<= 20, 1<=m<= 100),表示糖果的种数和一盒糖果盒的糖果个数。 接下来的n行,每行两个整数li, ri(0< li< ri <= 10),表示第i种糖果的数量限制上下限。
输出描述:
输出一个整数,表示满足限定条件的方案数。保证答案在64位整数范围内。
示例
输入
3 5 0 3 0 3 0 3
输出
12
代码实现
package aiqiyi.demo3; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();// 颜色种类 int m = scanner.nextInt();// 盒子放置m个糖果 int[] l = new int[n]; int[] r = new int[n]; int least = ; int[] rem = new int[n];// 表示每一种颜色剩余可以加的 for (int i = ; i < r.length; i++) { l[i] = scanner.nextInt(); r[i] = scanner.nextInt(); least += l[i]; rem[i] = r[i] - l[i]; } int target = m - least; long[][] dp = new long[n + ][target + ]; for (int i = ; i < dp.length; i++) { dp[i][] = ; } for (int i = ; i <= n; i++) { for (int j = ; j <= target; j++) { for (int k = ; k <= rem[i - ]; k++) { if (j - k >= ) dp[i][j] += dp[i - ][j - k]; } } } System.out.println(dp[n][target]); } }
相关推荐
腾讯VIPyove 2013-08-29
chenyangah 2016-10-12
绿豆饼 2019-07-05
taiyangshenniao 2019-06-11
郑贺腾讯社交广告 2013-08-29
Fairetal 2015-12-10
DAxiongyouxiH 2014-08-12
JayXio 2018-08-09
dutiyanwang 2018-08-07
heimahb 2018-03-06
我和我追逐的梦 2018-05-21
rongjiang00 2017-10-19
huss 2017-10-27
timy0 2017-01-26
arcsinz 2019-04-25
AndroidAiStudy 2018-12-27
赌书消得泼茶香 2018-05-25
三节课 2018-05-22
知影 2018-05-20