Se consideră două tablouri unidimensionale a şi b fiecare având numere naturale de
maximum patru cifre, ordonate crescător. Tabloul a conţine n(1<n<100) numere pare, iar
tabloul b conţine m (1<m<100) numere impare.
a) Scrieţi un program C/C++ care citeşte de la tastatură valoarea lui n şi cele n elemente ale tabloului a, apoi valoarea lui m şi cele m elemente ale tabloului b după care scrie în fişierul BAC.TXT un număr maxim de elemente ale tablourilor date, numerele fiiind scrise în ordine crescătoare, separate prin câte un spaţiu, iar cele aflate pe poziţii consecutive fiind de paritate diferită. Programul va utiliza un algoritm eficient din punct de vedere al timpului de executare.
Exemplu: pentru n=6, m=5 şi tablourile a=(2,4,8,10,14,16) şi b=(3,5,7,11,15 )
fişierul BAC.TXT va avea următorul conţinut : 2 3 4 5 8 11 14 15 16.
b) Descrieţi succint, în limbaj natural, algoritmul pe baza căruia a fost scris programul de la punctul a), explicând în ce constă eficienţa metodei utilizate.
blindseeker90:
Nu inteleg ce se intampla. Tu intri in while fara sa stii valoarea lui c[1]. Nu imi dau seama cum poti sa faci comparatiile
Răspunsuri la întrebare
Răspuns de
1
#include <iostream>
using namespace std;
int main(){
int a[100],b[100],c[100],n,m,k,i,ind_a,ind_b,primul_impar=0;
cout<<"n=";
cin>>n;
//par
for(i=1;i<=n;i++){
cin>>a[i];
}
cout<<"m=";
cin>>m;
//impar
for(i=1;i<=m;i++){
cin>>b[i];
}
ind_a=1;
ind_b=1;
if(a[1]<b[1]){
c[1]=a[1];
primul_impar=0;
ind_a++;
}
else{
c[1]=b[1];
primul_impar=1;
ind_b++;
}
cout<<c[1]<<" ";
k=2;
while(ind_a<=n||ind_b<=m){
if((k%2==0&&primul_impar==0)||(k%2==1&&primul_impar==1)){
cout<<"Aici "<<ind_b<<" "<<b[ind_b]<<endl;
while(b[ind_b]<c[k-1]){
ind_b++;
}
c[k]=b[ind_b];
ind_b++;
}
else{
while(a[ind_a]<c[k-1]){
ind_a++;
}
c[k]=a[ind_a];
ind_a++;
}
k++;
}
for(i=1;i<k;i++){
cout<<c[i]<<" ";
}
return 0;
}
using namespace std;
int main(){
int a[100],b[100],c[100],n,m,k,i,ind_a,ind_b,primul_impar=0;
cout<<"n=";
cin>>n;
//par
for(i=1;i<=n;i++){
cin>>a[i];
}
cout<<"m=";
cin>>m;
//impar
for(i=1;i<=m;i++){
cin>>b[i];
}
ind_a=1;
ind_b=1;
if(a[1]<b[1]){
c[1]=a[1];
primul_impar=0;
ind_a++;
}
else{
c[1]=b[1];
primul_impar=1;
ind_b++;
}
cout<<c[1]<<" ";
k=2;
while(ind_a<=n||ind_b<=m){
if((k%2==0&&primul_impar==0)||(k%2==1&&primul_impar==1)){
cout<<"Aici "<<ind_b<<" "<<b[ind_b]<<endl;
while(b[ind_b]<c[k-1]){
ind_b++;
}
c[k]=b[ind_b];
ind_b++;
}
else{
while(a[ind_a]<c[k-1]){
ind_a++;
}
c[k]=a[ind_a];
ind_a++;
}
k++;
}
for(i=1;i<k;i++){
cout<<c[i]<<" ";
}
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă