拼多多笔试-基础平台研发-123题解
拼多多笔试,基础平台研发,4个过了仨
1.谁喝到最后一个复制可乐,比较简单
2.世界杯选球王,输入那个地方不太熟搞了半天,然后题目又理解了好半天,基本上理解了就写了个暴力比较,过了
3.N个货物需要装几个车,重量从大到小贪心的选择,判断是否能连续装载,本来AC的还有错误尴尬后来改了下或许对了吧
4.手机号变靓号,我还要再想想。。。
看你们说的其他岗位的题,跟我的还不太一样?
————————————————————分界线————————————————
第一次写帖子,不太熟编辑格式尴尬
写的不太好的地方,多多指正了
第一题代码
import java.util.Scanner; public class Main_1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String[] names = {"Alice", "Bob", "Cathy", "Dave"}; int curr = 0; int fuzhi = 1; while(true){ int judge = 0; for(int i = 0; i < 4; i++){ curr += fuzhi; if(curr >= n){ System.out.println(names[i]); judge = 1; break; } } if(judge == 1){ break; } fuzhi *= 2; } } }
第二题代码
import java.util.Scanner; public class Main_2 { public static void main(String[] args) { // 输入 Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); sc.nextLine(); String[] strs = new String[m]; for(int i = 0; i < m; i++){ strs[i] = sc.nextLine(); } // 两两球星比较,matrix[i][j] > 0 , 表示i球星强于j球星 int[][] matrix = new int[n][n]; for(int i = 0; i < n; i++){ for(int j = i+1; j < n; j++){ int cishu = 0; for(int k = 0; k < m; k++){ if(strs[k].charAt(i) > strs[k].charAt(j)){ cishu--; }else if(strs[k].charAt(i) < strs[k].charAt(j)){ cishu++; } } matrix[i][j] = cishu; matrix[j][i] = -cishu; } matrix[i][i] = 1; } // 判断是否有球王,i球星大于每一个球星 boolean exist = false; for(int i = 0; i < n; i++){ boolean judge = true; for(int j = 0; j < n; j++){ if( matrix[i][j] <= 0){ judge = false; } } // 存在球王 if(judge == true){ System.out.println(i); exist = true; break; } } // 不存在球王 if(exist == false){ System.out.println(-1); } } }
第三题代码,原答案,AC了但有错误
import java.util.Arrays; import java.util.Scanner; public class Main_3 { public static void main(String[] args) { // 输入 // 直接输入一行不太会,按说先输入N,再输入N个数多好 // 然后我就把它当字符串,再转换成数组了 Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String str = in.nextLine(); String[] strlist = str.split(" "); int len = strlist.length; int[] nums = new int[len]; for(int i = 0; i < strlist.length; i++){ nums[i] = Integer.parseInt(strlist[i]); } // 排序 Arrays.sort(nums); // 判断用几个车 int carNum = 0; int[] check = new int[len]; for(int i = 0; i < len ; i++){ if(check[i] == 0){ // 一个车先装一个货物 check[i] = -1; carNum++; // 一个车总共装三个货物,只有三个100重量装一个车的情况 if(i+2 < len && nums[i] == 100 && nums[i+2] == 100){ check[i+1] = -1; check[i+2] = -1; }else { // 一个车总共装两个货物 int temp = 300 - nums[i]; for (int j = len - 1; j > i; j--) { if (check[j] == 0 && nums[j] <= temp) { temp = temp - nums[j]; check[j] = -1; // 应该可以直接break,当时这样写了就这样吧 } } } } } System.out.println(carNum); } } }
第三题代码,修改
import java.util.Arrays; import java.util.Scanner; public class Main_3_1 { public static void main(String[] args) { // 输入 // 直接输入一行不太会,按说先输入N,再输入N个数多好 // 然后我就把它当字符串,再转换成数组了 Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String str = in.nextLine(); String[] strlist = str.split(" "); int len = strlist.length; int[] nums = new int[len]; for(int i = 0; i < strlist.length; i++){ nums[i] = Integer.parseInt(strlist[i]); } // 排序 Arrays.sort(nums); // 判断用几个车 int carNum = 0; int[] check = new int[len]; for(int i = len-1; i >= 0 ; i--){ // 改了下,从大到小装货物 if(check[i] == 0){ // 一个车先装一个货物 check[i] = -1; carNum++; // 从大到小判断是否 继续装货物 int temp = 300 - nums[i]; for (int j = len - 1; j >= 0; j--) { if (check[j] == 0 && nums[j] <= temp) { temp = temp - nums[j]; check[j] = -1; } } } } System.out.println(carNum); } } }
}
测试用例:
130 140 150 160
2
130 140 150 160 100 100 100
3
100 100 100 100 100 100 200 200 200
4