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;
} 