Pagini recente » Cod sursa (job #2957229) | Cod sursa (job #3268257) | Cod sursa (job #2882572) | Cod sursa (job #2606245) | Cod sursa (job #195668)
Cod sursa(job #195668)
#include<fstream.h>
#include<math.h>
#include <stdio.h>
void quickSort(long numbers[], int array_size);
void q_sort(long numbers[], int left, int right);
int main()
{
long delta,v[1000][5],aux,a,b,c,k,d[1000]={0},m,p[1000]={0},l=0,j=0;float x1,x2;
int i;
float jj=0;
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
f>>a>>b>>c>>k;
delta=b*b-4*a*c;
if (delta<0) g<<"-1";
else
{
jj=sqrt(delta);
if(delta==jj*jj)
{
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
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];
j=0;
for(i=0;i<m;i++)
{
v[j][1]=p[i];
v[j][2]=-x1*p[i];
v[j][3]=a/p[i];
v[j][4]=-x2*(a/p[i]);
if(v[j][1]!=0&&v[j][2]!=0&&v[j][3]!=0&&v[j][4]!=0)
if((v[j][2]*v[j][4]==c)&&(v[j][1]*v[j][3])==a)
j++;
v[j][1]=p[i];
v[j][2]=-x2*p[i];
v[j][3]=a/p[i];
v[j][4]=-x1*(a/p[i]);
if((v[j][1]!=0)&&(v[j][2]!=0)&&(v[j][2]!=0)&&(v[j][4]!=0))
if((v[j][2]*v[j][4]==c)&&(v[j][1]*v[j][3])==a)
j++;
}
for(i=0;i<j-1;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;
}
j--;
k--;
if(k<=j)
{
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][2]==1) g<<"(x";
else
if(v[k][2]==-1) g<<"(-x";
else g<<"("<<v[k][2]<<"x";
if(v[k][4]>0) g<<"+"<<v[k][4]<<")";
else g<<v[k][4]<<")";
}
else g<<"-1";
}
else
g<<"-1";
}
return 0;
}
void q_sort(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);
}