Pagini recente » Cod sursa (job #1279489) | Cod sursa (job #2686691) | Cod sursa (job #189095) | Cod sursa (job #2432549) | Cod sursa (job #465914)
Cod sursa(job #465914)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define eps 0.0000000000000001
double t[10001];
long f[10001];
int main()
{
long n,i,num=0,poz,da;
double a,b,r,s,ab,max=-1.0;
double min,minn;
freopen("minim2.in","r",stdin);
freopen("minim2.out","w",stdout);
scanf("%ld",&n);
s=0.0;
for (i=1;i<=n;i++)
{
scanf("%lf",&t[i]);
s=s+t[i];
if (t[i]-max>=eps)
{
max=t[i];
poz=i;
}
}
scanf("%lf%lf%lf",&a,&b,&r);
ab=fabs(s-r);
if (ab<eps)
{
printf("0\n");
return 0;
}
if (s-r<=-eps)
{
printf("0\n");
return 0;
}
s=s-t[poz];
t[poz]=t[poz]*a;
f[poz]=1;
s=s+t[poz];
num++;
ab=fabs(s-r);
if (ab<eps)
{
printf("%ld\n",num);
return 0;
}
if (s-r<=-eps)
{
printf("%ld\n",num);
return 0;
}
while (1)
{
num++;
min=s-t[1]+(t[1]*b);
poz=1;
da=1;
for (i=2;i<=n;i++)
{
if (f[i])
{
minn=s-t[i]+(t[i]*b);
ab=fabs(minn-r);
if (ab<eps)
{
printf("%ld\n",num);
return 0;
}
if (minn-r<=-eps)
{
printf("%ld\n",num);
return 0;
}
if (minn-min<=-eps)
{
min=minn;
poz=i;
da=1;
}
}
else
{
minn=s-t[i]+(t[i]*a);
ab=fabs(minn-r);
if (ab<eps)
{
printf("%ld\n",num);
return 0;
}
if (minn-r<=-eps)
{
printf("%ld\n",num);
return 0;
}
if (minn-min<=-eps)
{
min=minn;
poz=i;
da=0;
}
}
}
s=s-t[poz];
if (da==1)
t[poz]=t[poz]*b;
else
{t[poz]=t[poz]*a;f[poz]=1;}
s=s+t[poz];
ab=fabs(s-r);
if (ab<eps)
{
printf("%ld\n",num);
return 0;
}
if (s-r<=-eps)
{
printf("%ld\n",num);
return 0;
}
}
return 0;
}