test1:有n张牌,你有两发子弹,需要分别同时命中第一张牌和最后一张张牌,尝试求出概率,结果四舍五入保留10位小数;
实例
输入:2
输出:1.0000000000
test2:你有n个小红书账号,每个账号粉丝为a_n,你需要创建一个粉丝为k的新账号,你可以通过老账号发推文来宣传新账号,宣传的方式有两种。第一种是浅度宣传,浅度宣传可以为新账号增加a_n/2(向下取整)粉丝。第二种是重度宣传,重度宣传可以为新账号增加a_n粉丝。其中重度宣传你最多使用一次。求需要最少账号个数
实例
输入:5 81 2 3 4 10
输出:2(用第三个账号重度宣传和第五个账号浅度宣传)
test3:有n个数,求每个数第一次全都是偶数的期望
实例
输入:21,2
输出:1/2 * 4 + 1/8 * 6 + 1/32 * 8 +... =(我忘了咋算了)好像是6
public static void test1(){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
double x = n;
double res = 2 / (x * (x - 1));
DecimalFormat decimalFormat = new DecimalFormat("#.##########");
String format = decimalFormat.format(res);
System.out.println(format);
}
public static void test2(){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
int[][] dp = new int[k + 1][2];
for (int i = 0; i <= k ; i++) {
dp[i][0] = Integer.MAX_VALUE;
dp[i][1] = Integer.MAX_VALUE;
}
dp[0][0] = 0;
dp[0][1] = 0;
for (int i = 0; i < n; i++) {
int act = nums[i] / 2;
for (int j = k; j >= act ; j--) {
if (dp[j - act][0] != Integer.MAX_VALUE){
dp[j][0] = Math.min(dp[j][0], dp[j - act][0] + 1);
dp[j][1] = Math.min(dp[j][1], dp[j - act][1] + 1);
}
if (j - nums[i] >= 0 && dp[j - nums[i]][0] != Integer.MAX_VALUE){
dp[j][1] = Math.min(dp[j][1], dp[j - nums[i]][0] + 1);
}
}
}
System.out.println(Math.min(dp[k][0], dp[k][1]));
}
不知道对不对,是在考试后做的,题二是受@noodles:)老哥的提示。希望和大家一起讨论一下。
第三题不太会,有点思路但不多
#小红书笔试题#