va rog mult , ajutati-ma la problema aceasta de C++
Fişierul BAC.DAT conţine pe prima linie, separate printr-un spaţiu, două valori naturale n şi m (2≤n≤1000, 2≤m≤1000), pe a doua linie n valori întregi şi pe a treia linie m valori întregi. Valorile de pe a doua şi de pe a treia linie apar în fişier în ordine strict crescătoare, sunt separate prin câte un spaţiu şi au cel mult 4 cifre fiecare. Se cere afişarea pe ecran a două valori, dintre cele aflate în poziţii consecutive pe a treia linie a fişierului, care determină intervalul închis în care se află un număr maxim de valori de pe a doua linie a fişierului. Se va utiliza o metodă eficientă din punct de vedere al timpului de executare şi al spaţiului de memorie utilizat. Se garantează că cel puţin un număr aflat pe a doua linie a fişierului aparţine unuia dintre intervalele determinate de numerele de pe a treia linie a fişierului. Exemplu: dacă fişierul BAC.DAT are conţinutul alăturat, programul va afişa: 1 9
10 4
-1 1 3 4 5 6 10 15 16 117
0 1 9 20
Explicaţie: cele patru numere de pe a treia linie a fişierului determină trei intervale: [0,1], [1,9], [9,20]; în intervalul [1,9] se află 5 valori de pe a doua linie a fişierului, acesta fiind numărul maxim de valori aflate în unul dintre cele trei intervale.
Răspunsuri la întrebare
Răspuns de
5
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n,m,i,k=0,x=-1,a,b,ok=0;
ifstream fisier("BAC.DAT");
fisier>>n>>m;
int v1[n];
int v2[m];
for(i=0;i<n;i++)
fisier>>v1[i];
for(i=0;i<m;i++)
fisier>>v2[i];
fisier.close();
int V[m/2];
while(ok==0)
{
x++;
k=0;
a=v2[x];
b=v2[x+1];
for(i=0;i<n;i++)
{
if(v1[i]>=a && v1[i]<=b)
k++;
if(v1[i]>b)
break;
}
V[x]=k;
if(x==m/2)
ok=1;
}
k=0;
for(i=0;i<m/2;i++)
if(V[i]>k)
k=i;
cout<<v2[k]<<" "<<v2[k+1];
}
#include <fstream>
using namespace std;
int main()
{
int n,m,i,k=0,x=-1,a,b,ok=0;
ifstream fisier("BAC.DAT");
fisier>>n>>m;
int v1[n];
int v2[m];
for(i=0;i<n;i++)
fisier>>v1[i];
for(i=0;i<m;i++)
fisier>>v2[i];
fisier.close();
int V[m/2];
while(ok==0)
{
x++;
k=0;
a=v2[x];
b=v2[x+1];
for(i=0;i<n;i++)
{
if(v1[i]>=a && v1[i]<=b)
k++;
if(v1[i]>b)
break;
}
V[x]=k;
if(x==m/2)
ok=1;
}
k=0;
for(i=0;i<m/2;i++)
if(V[i]>k)
k=i;
cout<<v2[k]<<" "<<v2[k+1];
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă