鄭州軽工業大学oj問題解(c言語)1078-1080多実例試験、入門問題

2602 ワード

1078107908080はoj問題の3つの典型的なマルチグループテストデータの問題であり、最も簡単な問題1000のアップグレード版でもあり、従来の数十問題ループの問題とは異なり、ここでは新しい知識を運用してループを使用する必要がある.

1078 a+bマルチインスタンステスト(一)

  • 題目記述計算A+B
  • は、試験のグループ数を表す第1の動作の整数n(1≦n≦10)を入力する.以下にn組のテストデータがあり、各組1行、2個の整数、A,Bである.
  • は各行に対して入力を出力し、A+Bの値を出力し、単独で1行を占める.

  • コードは次のとおりです.
    #include
     
    int main()
    {
        int a,b,i,n,s;
        scanf("%d",&n);// , 
        for(i=1;i<=n;i++)
        {
            scanf("%d%d",&a,&b);//( a,b)
            s=a+b;
            printf("%d
    ",s); } return 0; }

    コード解析:


    明らかに、今回のテーマと従来のテーマの最大の違いは、2回の入力である.2行に分けて入力しますが、どうすれば2行に分けて入力できますか?一部の学生は直接2つの入力を考えているかもしれませんが、これはだめです.1行目と2行目はここで因果関係なので、1行目は2行目の入力回数を決めます.したがって、ここではネストループを使用する必要があります.コードの注釈の解釈は比較的はっきりしている.最初の入力はループの回数、すなわちn組のテストデータがあり、次の入力はa,bを1回ずつ入力する.単一サイクルで出力を完了します.
  • ここで注意すべきは、ループのたびに個別のプロセスであり、前回のループの入力は次の‘a,bの入力に影響を与えないことである.
  • 入力時の値を加算し、データの混同を避けることに注意してください.

  • 1079:a+bマルチインスタンステスト(二)

  • 題目記述計算A+B
  • 入力データは複数組あります.各組1行、整数A,Bである.
  • は各行に対して入力を出力し、A+Bの値を出力し、単独で1行を占める.
  • このようなマルチインスタンステストソリューションを提示します:while(scanf("%d%d",&a,&b)!=EOF){//テストデータのセットを読み込む//処理//出力結果}注意:EOFはマクロ定義定数-1、scanf関数遭遇ファイル終了フラグ関数戻り値は-1、キーボード入力時、ctrl+zは入力終了を表します例えば:while(scanf("%d%d",&a,&b)!=EOF) printf("%d",a+b);
  • #include
     
    int main()
    {   
        int a,b;
        while(scanf("%d%d",&a,&b)!=EOF)
        {
            printf("%d
    ",a+b); } return 0; }

    1079は1078の別の解法である.実は上の説明がはっきりしていることを示しています.ここではEOFの役割を重点的に述べるだけです.ここでEOFは,新たなデータ入力がなければループを終了するという意味である.ここではwhile文にしか適用できませんが、データの読み取りが容易で、ループの回数を自分で制限する必要がなく、漏れを避けるのが利点です.

    1080:a+bマルチインスタンステスト(三)

  • 題目記述計算A+B
  • 入力データは複数組あります.各組の1行は、2つの整数A,Bである.0を入力すると入力が終了し、このグループの入力は処理されません.
  • は各行に対して入力を出力し、A+Bの値を出力し、単独で1行を占める.
  • ヒント入力0 0が終了し、本題はループ条件でキーボード入力を読み取り、同時に判断することができる:while(scanf("%d%d",&a,&b),a!=0||b!=0) printf("%d",a+b);
  • #include
    int main()
    {
        int a,b;
        while(scanf("%d%d",&a,&b),a!=0||b!=0)
        {
            printf("%d
    ",a+b); } return 0; }

    1079と同様に1080は1078の第3の解法である.ここでは,A,Bの値を判断してループの終了を行い,aとbがともに0になるとループを終了する.この解法は通常,入力回数が明確な場合に用いられ,一定のコード量を節約できる.

    以上のように、多実例問題に直面して、皆さんは一反三を挙げて、以上のいくつかの解法を柔軟に運用して多実例テスト類の問題の計算を完成しなければなりません。もし後で類似の問題に出会って解法が見つからないならば、完全に1078-1080のこのいくつかの問題に戻って霊感を探して、両者が類似の場所があるかどうかを見ることができます。