Informatică, întrebare adresată de 4Ionut, 8 ani în urmă

Va rog frumos am nevoie de ajutor la urmatoarea problema, mai am un singur test din 9 si nu reusesc deloc sa il rezolv.Doar cu if while for si vectori,ofer tot ce vreti, puncte ,coroana orice dar sa imi spuneti si cum sa fac asta.Multumesc!


Cerință

Ți se dă un șir de n numere întregi, reprezentând pachetele trimise și un alt șir cu n - m numere întregi, reprezentând pachetele care au ajuns cu succes până la tine.


Elementele din cel de-al doilea șir NU vor fi în aceeași ordine ca și cele din primul. Totuși în cazul în care există mai multe pachete cu aceeași valoare, ele ajung în ordinea pozițiilor din șirul inițial.


În plus, toate valorile din al doilea șir se găsesc și în primul. Identifică elementele lipsă, ținând cont că ele nu sunt neapărat pe poziții consecutive în primul șir.


Date de intrare

Pe prima linie se vor găsi numerele n și m, separate printr-un spațiu, iar pe următoarele două linii elementele celor două șiruri.


Date de ieșire

Programul va afișa pe ecran, în ordinea în care apar în primul șir, separate prin câte un spațiu, cele m elemente care lipsesc din al doilea șir. Dacă nu s-au pierdut date între cele două șiruri, programul va afișa pe ecran mesajul Nu s-au pierdut date.


Precizări și restricții

1 ≤ n ≤ 1 200

0 ≤ m < n

elementele din șir nu vor avea valori mai mari de 100 000, respectiv mai mici de -100 000

Exemple

Date de intrare

7 3
12 34 45 29 100 87 32
100 87 12 34
Date iesire
45 29 32

Răspunsuri la întrebare

Răspuns de Mateiut9
1

Răspuns:

#include <iostream>

using namespace std;

int main(){

   int v[101],m,n,pos=0,cnt=0;

   cin>>n;

   cin>>m;

   for(int i=1;i<=n;i++){

       cin>>v[i];

   }    

   

   for(int i=1;i<=m;i++){

       int nr;

       cin>>nr;

       for(int j=1;j<=n;j++){

           if(v[j]==nr){

               pos=j+1;

               for(int k=pos;k<=n;k++){

                   v[k-1]=v[k];

               }            

           }

       }

       n--;

   }    

   for(int i=1;i<=n;i++){

       cout<<v[i]<<" ";

   }

}

Explicație:


4Ionut: Multumesc, pentru raspuns dar nu se potriveste, al doilea sir e n - m nu doar m, te rog frumos mai poti incerca odata?
Mateiut9: Este acelasi lucru dar daca vrei tu,poti sa inlocuiesti pe m cu n peste tot si o sa fie la fel,
Răspuns de Sergetec
1

Salut!
Ai rezolvarea in C++ mai jos

#include <iostream>

using namespace std;

int n, m;

int a[1201], b[1201];

int main()

{

 cin >> n >> m;

 for (int i = 1; i <= n; ++i)

 {

   cin >> a[i];

 }

 for (int i = 1; i <= n - m; ++i)

 {

   cin >> b[i];

 }

 for (int i = 1; i <= n; ++i)

 {

   bool gasit = false;

   for (int j = 1; j <= n - m; ++j)

   {

     if (a[i] == b[j])

     {

       gasit = true;

       break;

     }

   }

   if (!gasit)

   {

     cout << a[i] << " ";

   }

 }

 return 0;

}


4Ionut: Salut!Multumesc foarte mult ca mi ai rspuns, s ar putea ca codul sa fie bun dar nu pot sa folosesc ce nu am invat pana acum de exemplu: true, false bool, break nu stiu ce fac.Trebuie sa fac problema asta doar cu if, else if, else, while, for si vectori atat.
Sergetec: Salut, in loc de bool poti sa folosesti un int pe care il initalizezi cu 1, iar daca a[i] == b[j] atunci acel int = 0
Sergetec: "break" poate sa fie scos, are rol de a imbunatati viteza de rulare a programului
Alte întrebări interesante