Pagini recente » Cod sursa (job #2564805) | Cod sursa (job #505629) | Cod sursa (job #2760737) | Cod sursa (job #1582115) | Cod sursa (job #197992)
Cod sursa(job #197992)
#include<fstream.h>
#include<math.h>
#include <stdio.h>
void quickSort(long long numbers[], int array_size);
void q_sort(long long numbers[], int left, int right);
void citire();
long long verific_delta();
void construire_div();
void construire_sol(long double x,long double y,int poz);
int verific(int t);
void sortez();
void afisare(long long k);
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
long long a,b,c,k,i,v[100][5],j,m,p[100];
int main()
{
citire();
long long h=verific_delta();
if(h!=0)
{ long double x1=(long double )(-b-h)/(2*a);
long double x2=(long double )(-b+h)/(2*a);
construire_div();
for(i=0,j=0;i<m;i++)
{ construire_sol(x1,x2,j);
if(verific(j)!=0)
j++;
construire_sol(x2,x1,j);
if(verific(j)!=0)
j++;
}
sortez();
k--;
j--;
if(k>j) g<<"-1";
else afisare(k);
}
else
g<<"-1";
return 0;
}
void citire()
{ f>>a>>b>>c>>k; }
long long verific_delta()
{
long long delta=b*b-4*a*c;
if(delta<0)
return 0;
else
{
long double m=sqrt(delta);
if(delta==m*m)
return m;
}
return 0;
}
void construire_div()
{
int l=0;
long long d[100];
for(i=1;i<=sqrt(abs(a));i++)
if(a%i==0)
{
d[l++]=i;
d[l++]=-i;
d[l++]=a/i;
d[l++]=-a/i;
}
q_sort(d,0,l-1);
m=0;
for(i=0;i<l;i++)
if(d[i]!=d[i+1])
p[m++]=d[i];
}
void construire_sol(long double x,long double y,int poz)
{
v[poz][1]=p[i];
v[poz][2]=-x*p[i];
v[poz][3]=a/p[i];
v[poz][4]=-y*(a/p[i]);
}
int verific(int t)
{
if((v[t][1]!=0&&v[t][2]!=0&&v[t][3]!=0&&v[t][4]!=0)&&(v[t][2]*v[t][4]==c)&&(v[t][1]*v[t][3])==a)
return 1;
return 0;
}
void sortez()
{
int aux;
for(i=0;i<=j;i++)
if(v[i][1]==v[i+1][1])
if(v[i][2]>v[i+1][2])
{
aux=v[i][2];
v[i][2]=v[i+1][2];
v[i+1][2]=aux;
aux=v[i][3];
v[i][3]=v[i+1][3];
v[i+1][3]=aux;
aux=v[i][4];
v[i][4]=v[i+1][4];
v[i+1][4]=aux;
}
}
void afisare(long long k)
{
if(v[k][1]==1) g<<"(x";
else
if(v[k][1]==-1) g<<"(-x";
else g<<"("<<v[k][1]<<"x";
if(v[k][2]>0) g<<"+"<<v[k][2]<<")";
else g<<v[k][2]<<")";
if(v[k][3]==1) g<<"(x";
else
if(v[k][3]==-1) g<<"(-x";
else g<<"("<<v[k][3]<<"x";
if(v[k][4]>0) g<<"+"<<v[k][4]<<")";
else g<<v[k][4]<<")";
}
void q_sort(long long numbers[], int left, int right)
{
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(numbers, left, pivot-1);
if (right > pivot)
q_sort(numbers, pivot+1, right);
}