boj 1072ゲームjava


リンク


1072:ゲーム

質問する


金亨沢はひそかにスパイダーカードを遊んでいる.亨沢はこのゲームに勝つ時もあるが、負ける時もある.人の視線を感じた亨沢はゲームをやめ、コードを始める.疑いを避けたと思った亨宅はゲームを再開した.その時、亨沢は短い符号化の過程で自分のゲームのレベルが明らかに向上したことに気づいた.
今の亨沢はこれからのすべてのゲームで負けない.しかし、ゲーム記録を削除することができないため、亨沢は自分の以前の記録が自分の現在の実力を証明できないと考えている.
ゲーム記録は以下の通り.
  • ゲーム回数:X
  • で勝ったゲーム:Y(Z%)
  • Zは亨沢の勝率で、小数点は捨てる.例えば、X=53、Y=47の場合、Z=88となる.
  • XとYの時亨宅は少なくとも何回ゲームをします まだ Zが変化しているかどうかを確認するプログラムを作成してください.

    入力


    各行に整数XとYがあります.

    しゅつりょく


    1行目の印刷亨沢は少なくともいくつかのゲームをしなければならない.Zが絶対に変わらない場合は-1を出力します.

    私の答え

  • 亨沢は以降のすべてのゲームで負けないので絶対に変わらない場合、99%以上の場合は例外扱いが可能です.
  • 問題
  • の例5の答えは、12572124である.
  • トラブルシューティング
  • 回数を増やすと,ゲーム回数Xがint範囲を超えるとは思わなかった.変数を長くしました.
  • コアコード
    answer= (int)Math.ceil((100*Y-Z*X)/(Z-100));
  • 完全コード
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class boj1072 {
        public static void main(String[] args) throws Exception{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
    
            long X = Integer.parseInt(st.nextToken());
            long Y = Integer.parseInt(st.nextToken());
            double Z = Math.floor(Y*100/X);
            int answer = 0;
            if(Z>=99) answer = -1;
            else{
                Z+=1;
                answer= (int)Math.ceil((100*Y-Z*X)/(Z-100));
            }
            System.out.println(answer);
        }
    }
  • 結果