Cerința
Capitala imperiului este protejată de un zid de formă dreptunghiulară formată din n*m
cărămizi dispuse pe n
linii și m
coloane, linia 1
fiind cea mai de sus, iar linia n
fiind cea mai de jos. Fiecare cărămidă este alcătuită dintr-o substanță identificată printr-un număr natural nenul.
Cuceritorul Gigel are la dispoziție o armă specială, care poate fi programată să distrugă toate cărămizile din zid care sunt formate din aceeași substanță, cunoscută, la o singură tragere. După fiecare tragere, toate cărămizile care sunt situate deasupra celor distruse cad, până ajung pe o cărămidă din zid, sau la baza acestuia.
Solicitarea lui Gigel este să determinați structura zidului după un număr dat de trageri, k
.
Date de intrare
Programul citește de la tastatură numerele n m k
, iar apoi n
șiruri cu câte m
numere naturale, reprezentând cărămizile de pe fiecare linie. Apoi se vor citi k
numere naturale, reprezentând, în ordine, substanța din care sunt alcătuite cărămizile afectate de tragerea curentă.
Date de ieșire
Programul va afișa pe ecran n
șiruri cu câte m
numere naturale, separate prin exact un spațiu, reprezentând configurația zidului după cele k
trageri. Cărămizile distruse vor fi precizate prin numărul 0
.
Restricții și precizări
1 ≤ n, m ≤ 100
1 ≤ k ≤ 100
- substanțele din care sunt create cărămizile sunt identificate prin numere naturale nenule mai mici decât
1000
- dacă la o anumită tragere nu există în zid cărămizi de tipul utilizat la acea tragere, zidul rămâne nemodificat
Exemplu
Intrare
4 5 3 3 5 4 5 1 2 1 1 5 3 1 1 5 5 1 5 5 1 4 3 1 5 1
Ieșire
0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 2 0 4 4 3
Explicație
După prima tragere, zidul devine:
0 0 0 5 0 3 0 0 5 0 2 5 4 5 3 5 5 5 4 3
După a doua tragere, zidul devine:
0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 2 0 4 4 3
A treia tragere nu mai modifică zidul.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Arma:
//problema arma
/*
* Mai intai vom inlocui cu zero toate elementele care corespund unor caramizi distruse, pentru toate tragerile
* Apoi vom elimina de pe fiecare coloana elementele nule din interiorul coloanei, mutandu-le in partea de sus.
* Pentru aceasta, vom folosi un vector suplimentar.
*
* */
#include <iostream>
using namespace std;
int v[105], a[105][105], n, m, k;
int main(){
cin >> n >> m >> k;
for (int i = 1 ;i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
cin >> a[i][j];
for( ; k ; k --)
{
int x;
cin >> x;
for (int i = 1 ;i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
if(a[i][j] == x)
a[i][j] = 0;
}
for(int j = 1; j <= m ; j ++)
{
for(int i = 1 ; i <= n ; ++i)
v[i] = 0;
for(int i = n, p = 0 ; i >= 1 ; i--)
if(a[i][j] > 0)
v[++p] = a[i][j];
for(int i = n, p = 1 ; i >= 1 ; i--, p++)
a[i][j] = v[p];
}
for(int i = 1 ; i <= n ; ++i)
{
for(int j = 1 ; j <= m ; ++j)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #572 Arma
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #572 Arma de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!