10.15百度笔试+Java后端
两道题样例都通过,提交0%, 哭死我了。第一道找到原因,第二道有大佬可以指点一下。陷入第一二道题目的0%中。第三道没时间看。
一、 第一题。 1~n 选取k个数的最大积分。初始积分为0, 对于选取的每个数i, 如果i + 1不选, 得分加1
分析, 以1 2 3 4 5和1 2 3 4 5 6为例子
(一)当n为偶数时, 例如等于6, 那么间隔取可以获得的最多得分为n/2, 当选取的个数k小于或等于n/2时候,可以获得最大 得分k
当k 大于n/2时候, 剩余k - n/2个元素还没有选,继续选的话会扣分,但是需要注意选取红色箭头的位置元素是不会扣分的,
所以扣分总数应该为k - n/2 - 1, 那么最后得分为n/2 - (k - n/2 - 1)。记n/2 = max, 那么最后得分max - (k - max - 1)
笔试的时候忽略了n为偶数时候的这种情况, 提交通过0%(下面代码为笔试时候的代码)
(二) n 为奇数时候
max = n/2 + 1
跟上述情况一样, 但是不同的是当k > max时,先选max个元素得到max积分过后,剩下的max - k个元素每选一个都要扣分
最后得分max - (max - k)
// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); for (int i = 0; i < T; i++) { long n = in.nextLong(); long k = in.nextLong(); long max = 0; if (n % 2 != 0){ max = n / 2 + 1; }else { max = n / 2; } if (k <= max) { System.out.println(k); } else { System.out.println(2 * max - k); } } } }
二、第二题。输入一个字符串, 长度为n, 下标从1开始。对字符串进行n次操作,每次操作:将字符串的第i个元素放到最后
以abcdef举例子。可以看到以下标为i=1开始(假设下标从0开始)的所以下标i+2的元素的相对顺序不变,并且在最后的输出结果排在前面。以下标i=0开始(假设下标从0开始)的所以下标i+2的元素的变化如下图的箭头左边的ace的变化
下面代码样例通过,提交0%, 有没有大佬帮忙看一下
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String s = in.nextLine(); int len = s.length(); for(int i = 1; i < len; i += 2){ System.out.print(s.charAt(i)); } LinkedList<Character> list = new LinkedList<>(); for(int i = 0; i < len; i += 2){ list.add(s.charAt(i)); } for(int i = 1; i <= len - 2; i++){ char ch = list.get(0); list.remove(0); list.add(ch); } char ch = list.get(list.size() - 2); list.remove(list.size() - 2); list.add(ch); for(int i = 0; i < list.size(); i++){ System.out.print(list.get(i)); } } }