结果:解答错误,通过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));