Pagini recente » Cod sursa (job #1216801) | Cod sursa (job #2346102) | Cod sursa (job #2337610) | Cod sursa (job #2943409) | Cod sursa (job #195675)
Cod sursa(job #195675)
#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);
void citire();
long verific_delta();
void construire_div();
void construire_sol(long x,long y,int poz);
int verific(int t);
void sortez();
void afisare(long k);
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
///////////////////////////////////////////////////////
//// _ _ _ ////
//// \ / | | | | \ |\/| |_| | |\ | ////
//// \/ |_| | |_/ | | | | | | \| ////
//// ////
///////////////////////////////////////////////////////
/* VARIABILE */
long a,b,c,k,v[100][5],i,j,m,p[100];
int main()
{
citire();
long h=verific_delta();
if(h!=0)
{ long x1=(-b-h)/(2*a);
long x2=(-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) afisare(k);
else g<<"-1";
}
else
g<<"-1";
return 0;
}
void citire()
{ f>>a>>b>>c>>k; } //global
long verific_delta()
{
long delta=b*b-4*a*c;
if(delta<0)
return 0;
else
{
long m=sqrt(delta);
if(delta==m*m)
return m;
}
return 0;
}
void construire_div()
{
int l;
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 x,long 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-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;
}
}
void afisare(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][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]<<")";
}
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);
}