STL wejście: n i ciąg n liczb, wyjście: liczby niepodzielne przez pozostałe

0

Czy ktoś mógłby mi powiedzieć, co robię źle. Chodzi o końcówkę, czyli obliczanie reszty z dzielenia i tworzenie wektora v1 i wypisywanie jego zawartości:

#include <iostream>
#include<vector>
using namespace std;

int main(){
  vector<int>v;
  vector<int>v1;

  int n;
  cin>>n;
  
  for(int i=0;i<n;i++){
    int element;
    cin>>element;
    v.push_back(element);
  }
  
  for (int z=0;z<n;z++){
    cout<<" "<<v[z];
  }

  for(int j=0;j<n;j++){
    for(int k=0;k<n;k++){
      if (v[j]%v[k]!=0) v1.push_back(v[j]);
    } 
  }

  for(int m=0;m<v1.size();m++){
    cout<<" "<<v1[m];
  }
  
}

Przy wejściu:

4
2 3 4 5

Mam wyjście:

2 3 4 5 2 2 2 3 3 3 4 4 5 5 5

A polecenie brzmi: Użyj STL. Na standardowe wejście podane liczbę całkowitą n i ciąg n liczb całkowitych dodatnich.Na standardowych wyjściu mamy otrzymać wszystkie liczby, które nie są podzielne przez żadną z pozostałych podanych liczb.

1

Błąd masz w tym fragmencie:

  for(int j=0;j<n;j++){
    for(int k=0;k<n;k++){
      if (v[j]%v[k]!=0) v1.push_back(v[j]);
    } 
  }

Powinieneś sprawdzać czy dana liczba nie jest podzielna przez wszystkie inne, nie tylko jedną:

for (int i = 0; i < n; ++i) {
  bool isDivisible = false;

  for (int j = 0; j < n; ++j) {
    if (i == j) { // pomijamy sprawdzanie samego siebie z samym sobą - k jest zawsze podzielne przez k
      continue;
    }

    isDivisible |= (v[i] % v[j] == 0);
  }

  if (!isDivisible) {
    v1.push(v[i]);
  }
}

Btw, nie musisz nazywać każdego iteratora (zmiennej) pętli od nowa - taki kod jest jak najbardziej prawidłowy:

for (int i = 0; i < 10; ++i) {
  /* coś tam */
}

for (int i = 0; i < 10; ++i) { // <- bez problemu znowu możesz wykorzystać zmienną 'i'
  /* coś tam */
}
0

Hej,
nie jestem pewny, ale rozwiązanie może chyba nie być jednoznaczne, na przykład co zrobić z taką listą: [5, 7, 50, 77]. Wtedy mamy dwie listy spełniające Twój warunek, jeżeli się nie mylę: [5, 7] oraz [50, 77], dobrze myślę ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1