Orar semigroup #2

Orar semigroup #2

5 mai - cautare binara, a+b=S

Se citeşte de la tastatură un tablou de n numere întregi. Să se afişeze toate perechile de elemente din tablou care au suma egală cu o valoare dată, s.

#include<iostream>
using namespace std;

void ordonare(int a[], int n)
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(a[i]>a[j])
            swap(a[i],a[j]);
}

int binar(int a[],int x, int st, int dr)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(a[m]>x)
    return binar(a,x,st,m-1);
else if(a[m]<x) return binar(a,x,m+1,dr);
    else return m;
}

int main()
{int n,a[100],m,s,j,i,s1,s2;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"Citire vector"<<endl;
for(i=0;i<n;i++)
    cin>>a[i];
ordonare(a,n);
cout<<"Afisare vector"<<endl;
for(i=0;i<n;i++)
    cout<<a[i]<<" ";
cout<<endl<<endl<<"Solutii"<<endl;
for(i=n-1;i>=0 && a[i]>s;i--);
if(i==-1)
{cout<<"Nu exista solutii";return 0;}
n=i+1;
for(j=0;j<n && a[j]<=s/2;j++)
{s1=a[j];
s2=s-s1;
if(binar(a,s2,j+1,n-1)!=-1)
    cout<<s1<<"+"<<s2<<"="<<s<<endl;
}
}

joi, 5 mai 2011 by DlMuresan
Categories: , , , , , | Leave a comment

Leave a Reply