2017-12-03 13 views
0

私は3つの数字と多次元配列を導入すべきコードを持っています。私は..ベクトルに1つの要素だけを繰り返してプッシュ

を開始してから3つの数字と除数ある配列からすべての数字を印刷する必要があります。ここに私のコードです:

#include <vector> 
#include <iostream> 

using namespace std; 

int main() { 
    int r, p, k, nr, n, m, counter=0, temp; 
    vector <int> numbers; 

    cout << "Enter value of r, p, k: "; 
    cin >> r >> p >> k; 
    cout << "Enter the number of rows and columns: "; 
    cin >> n >> m; 

    int T[n][m]; 

    cout << "Enter values: "; 
    for(int i = 0; i < n; i++) { 
     for(int j = 0; j < m; j++) { 
      cin >> T[i][j]; 
     } 
    } 

    for(int i = 0; i < n; i++) { 
     for(int j = 0; j < m; j++) { 
      for(int a = 0; a < 1; a++) { 
       numbers.push_back(T[i][j]); 
       counter++; 

      } 
     } 
    } 

    for(int f = 0; f < counter; f++) { 
     if(r%numbers[f]==0 && p%numbers[f]==0 && k%numbers[f]==0) { 
      cout << numbers[f] << ' '; 
     } 
    } 

    return 0; 
} 

だから、私の質問は1つだけの時間を繰り返し、そのベクトル番号にプッシュする方法..です..配列内に同じ番号が2つある場合は、両方を印刷せずに1つだけ印刷してください。

ありがとうございます。

+1

おそらく[セット](http://en.cppreference.com/w/cpp/container/unordered_set)を使用していますか? –

+0

なぜfor(int a = 0; a <1; a ++) 'を使ったのですか? – abdullah

答えて

0

のための参照を見てみてください。たとえば、数字5を複数回挿入すると、セットには5つだけが表示されます。

最初に#include<set>。その後で

for(int f = 0; f < counter; f++) { 
    if(r%numbers[f]==0 && p%numbers[f]==0 && k%numbers[f]==0) { 
     cout << numbers[f] << ' '; 
    } 
} 

を交換

そして、その後

for(int i = 0; i < n; i++) { 
    for(int j = 0; j < m; j++) { 
     for(int a = 0; a < 1; a++) { 
      numbers.push_back(T[i][j]); 
      counter++; 

     } 
    } 
} 

for(int i = 0; i < n; i++) 
    for(int j = 0; j < m; j++) 
     numbers.insert(T[i][j]); 

と交換set<int> numbers;

vector <int> numbers;を置き換えます

for (auto i = numbers.cbegin(); i != numbers.cend(); ++i) 
    if(r % *i == 0 && p % *i == 0 && k % *i == 0) 
     cout << *i << ' '; 

これでいいはずです。 numbers.size()はセット内のオブジェクトの数を与えるので、プログラムからカウンタ変数を削除することができます。また、一時変数は使用されないので、その変数も削除してください。また、setは順序付けされたコンテナなので、このように印刷すると昇順に数値が出力されます。

(int arr [3];のような配列の長さは、コンパイル時には厳密に妥当なC++でなければならないことにも注意してください)ここで、3はリテラルなので、コンパイル時に知られています。コンパイル時に配列の長さが入力されていないことを意味します)。

関連する問題