1

私は楽しみのためにいくつかの ICPC プログラミングの問題をやっています。これは Collat​​z です。期待される出力に正しく適合する出力が得られました。しかし、必要に応じて -1 -1 入力になると、プログラムを終了させるのに問題がありました。

サンプル入力

3 100
34 100
75 250
27 2147483647
101 304
101 303
-1 -1

期待される出力

Case 1: A = 3, limit = 100, number of terms = 8 

Case 2: A = 34, limit = 100, number of terms = 14 

Case 3: A = 75, limit = 250, number of terms = 3  

Case 4: A = 27, limit = 2147483647, number of terms = 112

Case 5: A = 101, limit = 304, number of terms = 26 

Case 6: A = 101, limit = 303, number of terms = 1

Java コード

import java.util.Scanner;
import java.lang.Integer;

public class Collatz {
    private static int caseNumber = 0;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()) {
            caseNumber++;
            int a = in.nextInt();
            Integer limit = in.nextInt();
            if(a == -1 && limit == -1)
                break;
            int numberOfTerms = 0;
            for(Integer value = a; value != 1; numberOfTerms++){
                if(value%2 == 0){
                    value /= 2;
                }else{
                    value = 3 * value + 1;
                }
                if(limit < value)
                    break;
            }
            numberOfTerms +=1;
            System.out.println("Case " + caseNumber + ": A = " + a + ", limit = "
                    + limit + ", number of terms = " + numberOfTerms);
            System.out.println();

        }
    }
}
4

1 に答える 1

0

Eclipse (3.7.2) でコードを実行し、コンソール ウィンドウに値を入力すると、問題なく実行され、期待どおりに終了します。(つまり、「-1」が 2 回入力された場合)

プログラムが終了しない場合に考えられる原因:

  1. Scanner は、システムのデフォルトの文字セットに基づいてバイトを文字に変換します。システムの文字セットが原因で、'-1' が期待値以外に変換されている可能性はありますか?

  2. 「-1」値を入力するために使用している方法が、スキャナが -1 以外の値を読み取る原因となっている入力ストリームに末尾の文字または文字を追加している可能性はありますか?

各呼び出しの後に print ステートメントを追加しin.nextInt()て、生成される値を確認してください。

于 2012-04-18T19:43:07.790 に答える