360笔试代码题2AC
第一题很简单,找到规律一把过(题目图片来自网友“七少”供图)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String first = sc.nextLine(); String end = sc.nextLine(); sc.close(); int len = first.length(); int aNum = 0, tNum = 0; for (int i = 0; i < len; i++) { if(first.charAt(i) != end.charAt(i)){ if(first.charAt(i) == 'A') aNum++; else tNum++; } } if(aNum > tNum) System.out.println(aNum); else System.out.println(tNum); } }第二题刚开始用递归,优化到死还是0.45--0.55。然后发现这tm是概率论(题目图片来自网友“七少”供图)
import java.util.Scanner; public class Mian2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); sc.close(); double res = get(n, m); System.out.println(String.format("%.4f", res)); } private static double get(int n, int m) { double[][] nums = new double[n + 1][m + 1]; for (int i = 0; i < nums.length; i++) { nums[i][0] = 1.0; } for (int i = 1; i < nums.length; i++) { for (int j = 1; j < nums[0].length; j++) { nums[i][j] = nums[i][j] + (double) i / (i + j); double jm = (double) j; double in = (double) i; if(j > 1){ nums[i][j] = nums[i][j] + (jm / (in + jm)) * ((jm - 1) / (in + jm - 1)) * (in / (in + jm - 2)) * nums[i - 1][j - 2]; } if(j > 2){ nums[i][j] = nums[i][j] + (jm / (in + jm)) * ((jm - 1) / (in + jm - 1)) * (jm - 2) / (in + jm - 2) * nums[i][j - 3]; } } } return nums[n][m]; } }
最初始的递归解法:
private static double get1(double n, double m) { if(n <= 0) return 0.0; if(m <= 0) return 1.0; double curr = n / (n + m); if(m >= 3.0) { return curr + (1.0 - curr) * ((m - 1.0) / (n + m - 1.0)) * (((m - 2.0) / (n + m - 2.0)) * get(n, m - 3) + (n / (n + m - 2.0)) * get(n - 1, m - 2)); }else if(m == 2.0) return curr; else if(m == 1.0) return curr + (1.0 - curr) * (m - 1) / (n + m - 1) * get(n - 1.0, m - 2.0); return 0.0; }