fbpx

Problema #273 – OrdSume – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dă un şir cu n elemente, numere naturale. Să se afişeze, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir.

Date de intrare

Fişierul de intrare ordsume.in conţine pe prima linie numărul n, iar pe a doua cele n elemente ale şirului dat, separate prin spaţii.

Date de ieşire

Fişierul de ieşire ordsume.out va conţine pe prima linie, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir, separate printr-un spaţiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • numerele de pe a doua linie a fişierului de intrare vor avea cel mult 8 cifre

Exemplu

ordsume.in

4
1 7 3 5

ordsume.out

4 6 8 10 12
#include <bits/stdc++.h> 
 
using namespace std; 

ifstream fin("ordsume.in"); 
ofstream fout("ordsume.out"); 
 
int main()
{ 
    int n,m=0, a[101], s[10001];
    fin >> n; 
    for(int i=1;i<=n;++i) 
        fin >> a[i];  
    for(int i=1;i<n;++i) 
        for(int j=i+1 ; j<=n ; j++) 
        if(a[i]!=a[j]) 
    { int gasit = 0; 
     for(int k=1 ; k<=m && !gasit ; ++k) 
         if(s[k] == a[i]+a[j]) 
         gasit = 1; 
         if(!gasit) s[++m] = a[i]+a[j]; 
    } 
    for(int i=1;i<m;++i) 
        for(int j=i+1 ; j<=m ; ++j) 
        if(s[i]>s[j])
    { 
        int aux = s[i]; 
        s[i] = s[j]; 
        s[j] = aux; 
    } 
    for(int i=1;i<=m;++i) 
        fout << s[i] << " "; 
    return 0; 
}
Comentarii

S-ar putea sa iti placa