天天看點

L1-017. 到底有多二

題目

一個整數“犯二的程度”定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍;如果還是個偶數,則再增加1倍。例如數字“-13142223336”是個11位數,其中有3個2,并且是負數,也是偶數,則它的犯二程度計算為:3/11*1.5*2*100%,約為81.82%。本題就請你計算一個給定整數到底有多二。

輸入格式:

輸入第一行給出一個不超過50位的整數N。

輸出格式:

在一行中輸出N犯二的程度,保留小數點後兩位。

輸入樣例:

-13142223336
      

輸出樣例:

81.82%      

思路:

  這道題我按題目做出來有一個測試點錯誤。最後才發現還少一個當是正偶數的時候,也應該乘以2.

代碼:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      String s = sc.next();
      int count = 0;
      double q = 0;
      for ( int i = 0 ; i < s.length(); i++) {
          if (s.charAt(i) == '2') {
            count++;
          }
        }
      if (s.charAt(0) == '-') {
        q = (double) count / (s.length() - 1) * 1.5;
        if (s.charAt(s.length() -1) % 2 == 0) {
          q = (double) count / (s.length() - 1) * 1.5 * 2.0;
        }
      } else if(s.charAt(0) != '-'&&s.charAt(s.length() -1) % 2 == 0){
        q = (double) count / s.length()*2.0;
      }else if(s.charAt(0) != '-'&&s.charAt(s.length() -1) % 2 != 0){
    	  q = (double) count / s.length();
      }
      System.out.printf("%.2f%%", q * 100);
    }
}
           

簡單代碼:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      String s = sc.next();
      int count = 0,amount = s.length();
      double q = 0,a = 1, b = 1;
      for ( int i = 0 ; i < s.length(); i++) {
          if (s.charAt(i) == '2') {
            count++;
          }
        }
      if (s.charAt(0) == '-') {
        a = a * 1.5;
        amount -= 1;
      }  
      if ((s.charAt(s.length() -1)-'0') % 2 == 0) {
          b = b * 2.0;
       }
      q = (double) count / amount *a *b * 100;
      System.out.printf("%.2f%%", q );
    }
}