Pagini recente » Cod sursa (job #2129166) | Cod sursa (job #2155682) | Istoria paginii runda/anti_avram_2 | Cod sursa (job #1517784) | Cod sursa (job #465729)
Cod sursa(job #465729)
#include <stdio.h>
#include <math.h>
using namespace std;
#define DIF 0.000001
int abs (int x)
{
if (x < 0)
return x * -1;
return x;
}
float v[1001];
int uz[1001];
float record, A, B, suma;
int n, i, j, k;
int actionari;
float Min, min1;
int Max;
float nr1, nr2, val;
int main ()
{
FILE *f = fopen ("minim2.in","r");
FILE *g = fopen ("minim2.out","w");
fscanf (f,"%d", &n);
for (i=1; i<=n; ++i)
{
fscanf (f,"%f", &v[i]);
if (v[Max] < v[i])
Max = i;
suma += v[i];
uz[i] = 0;
}
fscanf (f,"%f %f %f", &A, &B, &record);
if (suma < record || abs(suma-record <= DIF))
{
fprintf (g,"0");
return 0;
}
while (suma > record || abs (suma-record) > DIF)
{
if (suma < record || abs(suma-record <= DIF))
break;
actionari ++;
if (!uz[Max])
{
suma -= (v[Max] - v[Max] * A);
v[Max] *= A;
uz[Max] = 1;
}
else
{
suma -= (v[Max] - v[Max] * B);
v[Max] *= B;
}
//printf ("v = %f suma = %f\n", v[Max], suma);
if (!uz[1])
nr1 = v[1] * A;
else
nr1 = v[1] * B;
if (!uz[2])
nr2 = v[2] * A;
else
nr2 = v[2] * B;
if (nr1 > nr2)
{
Max = 1;
val = nr1;
}
else
{
Max = 2;
val = nr2;
}
for (i=3; i<=n; ++i)
{
if (!uz[i])
nr1 = v[i] * A;
else
nr1 = v[i] * B;
if (nr1 > val)
{
Max = i;
val = nr1;
}
}
if (suma < record || abs(suma-record <= DIF))
break;
}
/*for (i=1; i<=n; ++i)
printf ("%f ", v[i]);
printf ("\n\nactionari = %f", suma);*/
fprintf (g,"%d", actionari - 1);
fclose(g);
fclose(f);
return 0;
}