• 爱奇艺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 = 0;
            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[3];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = scanner.nextInt();
            }
            Arrays.sort(arr);
            if ((arr[2] - arr[1] + arr[2] - arr[0]) % 2 == 0) {
                System.out.println((arr[2] - arr[1] + arr[2] - arr[0]) / 2);
            } else {
                System.out.println((arr[2] - arr[1] + arr[2] - arr[0] + 3) / 2);
            }
        }
    }
    
    

    牛牛配糖果

    题目描述

    牛牛有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 = 0;
            int[] rem = new int[n];// 表示每一种颜色剩余可以加的
            for (int i = 0; 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 + 1][target + 1];
            for (int i = 0; i < dp.length; i++) {
                dp[i][0] = 1;
            }
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= target; j++) {
                    for (int k = 0; k <= rem[i - 1]; k++) {
                        if (j - k >= 0)
                            dp[i][j] += dp[i - 1][j - k];
                    }
                }
            }
            System.out.println(dp[n][target]);
        }
    }
    
    
  • 相关阅读:
    bzoj 3040: 最短路(road)
    bzoj 2049: [Sdoi2008]Cave 洞穴勘测
    poj 2505 A multiplication game
    hdu 1729 Stone Game
    经典博弈模型
    hdu 1848 Fibonacci again and again(SG函数)
    hdu 2147 kiki's game(巴什博弈)
    hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
    hdu 4388 Stone Game II
    poj 2234 Matches Game
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8886620.html
Copyright © 2020-2023  润新知