结果:解答错误,通过case数20%
代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Main m = new Main();
System.out.println( m.pro(n) );
}
private Double pro(int n ){
double result = 0.0;
if(n < 0){
return Double.parseDouble(String.format("%.6f",0.000000));
}
if( n > 990 ){
return Double.parseDouble(String.format("%.6f",1.000000));
}
double top = 1;
double under = 1;
if(n <= 10){
for(int i = 0; i < n; i++){
top *= (990-i);
under *= (1000-i);
}
}else{
for(int i = 0; i < 10; i ++){
top *= (990-n+1+i);
under *= (1000-i);
}
}
result = 1- top/under;
return Double.parseDouble(String.format("%.6f",result));
}
}
发现:
- int型的top、under,只会通过10%的case
- double的则会通过20%
tip1:
我觉得应该是top、under的范围问题,但对于这种问题的处理不太擅长,导致问题的出现,网上没查到相关题目的解题方法,如果有AC此题的大佬,望不吝赐教,感谢!!!
tip2:
输出保留6位小数的方法:
(使用String的format方法截取,然后使用工具类Double转换)
Double.parseDouble(String.format("%.6f",result));

本文主要讨论了一段Java代码在计算概率时遇到的问题。代码中使用了int类型的变量top和under来存储中间结果,导致只有10%的测试用例能通过。当将类型改为double后,通过率提升到20%,但作者对于为何如此以及如何优化仍有困惑。文章提到了可能的范围问题,并寻求解题思路。同时,文章介绍了保留小数位数的处理方法,即使用String.format和Double.parseDouble。
3234

被折叠的 条评论
为什么被折叠?



