pat的一道题
提交之后有两个测试点过不去
我的代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
double fu = 0,ou = 0,a_2 = 0;
int i = 0;
if(s.charAt(0)==45){
//如果是负数
fu = 0.5;
}
while(i<s.length()){
//判断2 的个数
if((s.charAt(i)-48)==2){
a_2++;
}
i++;
}
if(s.charAt(s.length()-1)%2==0){
//如果是偶数
ou = 1.0;
}
double fan2 = 0;
if(fu==0){//正数
fan2 = a_2/((double)(s.length()));
}else{//负数
fan2 = a_2/(s.length()-1)*(ou+fu);
}
//测试2的个数/总字符串长度的值
System.out.println(fan2);
System.out.printf("%.2f%%",fan2*2*100);
}
}
请问这是哪点没有通过呢?
題主沒看清題意,負數是增加0.5倍,要乘以1.5,偶數是增加1倍,要乘以2.
fan2 = a_2/(s.length()-1)*(ou+fu ); // 你這比例因子是乘對了嗎?
還有正數也可以是偶數,都不知道你其他case是怎麼通過的
另外,正如@zjupure 所說,感覺題主對題目理解有偏差,我也是按@zjupure 理解的。
但奇怪的是,這樣題主的程式碼也跑通了66.67%的測驗…
另外,有些測試跑不通也有可能是邊界條件和輸入參數校驗沒有做判斷導致的,例如輸入的不是一個數字,或者像+0, -0這樣的數值,題主可以把這些也加進去(雖然我覺得作為演算法題寫這些程式碼很操蛋,但為了跑通測試…)。
補充一點:如果第一位是負號,那麼需要從第二位開始計算是否為2,以及數字的位數