• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:どこを変えればいいですか?)

20個の整数データを順に入力し、異なるデータを出力するプログラム

このQ&Aのポイント
  • 20個の整数データを順に入力するプログラムを作成します。
  • 新たに入力されたデータが、すでに入力されたデータと異なる場合のみ、そのデータを出力します。
  • 出力されるデータは、1行に1つずつ表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

#include <iostream> int main(void) { int i1, i2, x[20]; std::cin >> x[0]; for (i1 = 1; i1 < 20; i1++) { std::cin >> x[i1]; for (i2 = 0; i2 < i1; i2++) { if (x[i1] == x[i2]) break; } if (i1 == i2) std::cout << x[i1] << std::endl; } return 0; } 最初の1個目を入力した時は「すでに入力されたデータなど存在しない」ので、何も表示してはいけない。 つまり、最初の1個目は「無条件に入力するだけ」になる。 判定を行う必要があるのは2個目から20個目で、配列添え字で言えば1~19になり for (i1 = 1; i1 < 20; i1++) { となる。 判定の相手となるデータは、1個目から始め、現在の入力の1つ手前までになるので for (i2 = 0; i2 < i1; i2++) { となる。 同じ物があった場合に内側のループをbreakすると、ループを抜けた後でi1とi2が等しくない状態になる。 逆に言うと、同じ物が無い場合はbreakせずに最後までループが回り、最後まで回った場合はi1とi2が等しくなる。 したがって、ループ終了後、i1とi2が等しいかどうかを判定するだけで、既存データに一致データがあったかどうか判る事になり if (i1 == i2) std::cout << x[i1] << std::endl; で良い。 必要最低限の変数とロジックのみで出来ている事に注意すべし。

関連するQ&A