Informatică, întrebare adresată de sacalu50, 9 ani în urmă

Se citește un vector cu n elemente, numere naturale. Să se determine câte elemente ale vectorului sunt egale cu diferența dintre cea mai mare și cea mai mică valoare din vector.

Răspunsuri la întrebare

Răspuns de ardyarde
2
#include <iostream>
using namespace std;

int main()
{
    int n,dif=0,maxim=0,x,y=0,i;
    cin>>n;
    x=n;
    int v[n+1];
    int minim=n;
    while(n)
    {
        cin>>v[n];
        if(v[n]>maxim)
            maxim=v[n];
        if(v[n]<minim)
            minim=v[n];
    n--;
    }
    dif=maxim-minim;
    for(i=0;i<x;i++)
      if(v[i]==dif)
       y++;
    cout<<y;
return 0;
}


AntiEaglesDavids: trebuie schimbat minim = n cu altceva, cel mai bine cu primu element din vector, asa sigur iti va merge bine
ardyarde: #include <iostream>
using namespace std;

int main()
{
int n,dif=0,maxim=0,x,y=0,i;
cin>>n;
x=n;
int v[n+1];
cin>>v[n];
int minim=v[n];
n--;
while(n)
{
cin>>v[n];
if(v[n]>maxim)
maxim=v[n];
if(v[n]<minim)
minim=v[n];
n--;
}
dif=maxim-minim;
for(i=0;i<x;i++)
if(v[i]==dif)
y++;
cout<<y;
return 0;
}
AntiEaglesDavids: asa ;)
AntiEaglesDavids: insa cred ca ar fi bine si maxim sa fie initializat cu primu elem deoarce daca ai doar un element s-ar putea sa ramai cu maximu 0 si minimu egal cu primu elemnt, nu-i asa?
ardyarde: a da, desigur
ardyarde: #include <iostream>
using namespace std;

int main()
{
int n,dif=0,maxim,x,y=0,i;
cin>>n;
x=n;
int v[n+1];
cin>>v[n];
int minim=v[n];
maxim=v[n];
n--;
while(n)
{
cin>>v[n];
if(v[n]>maxim)
maxim=v[n];
if(v[n]<minim)
minim=v[n];
n--;
}
dif=maxim-minim;
for(i=0;i<x;i++)
if(v[i]==dif)
y++;
cout<<y;
return 0;
}
ardyarde: mai zi boss, ce-am mai gresit? :))
AntiEaglesDavids: pt n = 3, v = {2, 4, 4} nu merge, inlocuieste for(i = 0; i < x; i++) cu for(i = 1; i <= x; i++)
ardyarde: #include <iostream>
using namespace std;

int main()
{
int n,dif=0,maxim,x,y=0,i;
cin>>n;
x=n;
int v[n+1];
cin>>v[n];
int minim=v[n];
maxim=v[n];
n--;
while(n)
{
cin>>v[n];
if(v[n]>maxim)
maxim=v[n];
if(v[n]<minim)
minim=v[n];
n--;
}
dif=maxim-minim;
for(i=1;i<=x;i++)
if(v[i]==dif)
y++;
cout<<y;
return 0;
}
AntiEaglesDavids: pentru n = 0 (vector gol) vei intra in loop infinit, baga un if(n <= 0) { cout << 0; return 0; } ca sa nu ai probleme
Răspuns de AntiEaglesDavids
0
#include <bits/stdc++.h>
using namespace std;

int main()
{
    size_t n, nr = 0;
    cin >> n;
    vector<int> v(n);
    for(size_t i = 0; i < n; ++i)
        cin >> v[i];

    for(size_t i = 0; i < n; ++i)
        if(v[i] == *minmax_element(v.begin(), v.end()).second - *minmax_element(v.begin(), v.end()).first)
            nr++;

    cout << nr << '\n';
    return 0;
}



AntiEaglesDavids: mai eficienta e varianta lui @ardyarde apropo asa ca iti sugerez sa folosesti rezolvarea lui
Alte întrebări interesante