testul 1 este
5
12
5
1
3
5
metoda la care m-am gandit este sa fac maximul a 3 elemente citite consecutiv si inca 2 maximuri a cate 2 elemente citite consecutiv, respectiv le retin indicii.
pt exemplul de sus ar fi max1=12*5*1 (maximul a 3 elemente) si max2=12*5 si max3=3*5( celelalte 2 maximuri).
intreb care e mai mare (max1 sau max2+max3)
pun intr-un S pe cel mai mare, si fac, cu ajutorul indicilor retinuti mai sus, elementele inmultite ale numarului mai mare egale cu 0 in vectorul in care am citit toate numerele.
daca initial este v: 12 5 1 3 5, dupa va fi v: 0 0 1 0 0
apoi fac suma.
nu prea ma pricep sa explic, sunt si in clasa a 9a (am inceput informatica de anul asta) asa ca ...
EDIT:
#include<fstream.h>
int a[1001];
int main()
{
int n,x,i,k1,k2,k3,k4,k5,k6,k7;
long long max1=0,max2=0,max3=0,s=0;
ifstream f("expresie.in");
ofstream g("expresie.out");
f>>n;
k1=k2=k3=k4=k5=k6=k7=0;
for (i=1;i<=n;i++)
f>>a[i];
for (i=2;i<=n-1;i++)
{
if (a[i-1]*a[i]*a[i+1]>max1)
{
max1=a[i-1]*a[i]*a[i+1];
k1=i-1;
k2=i;
k3=i+1;
}
if (a[i]>max2)
{
max3=max2;
max2=a[i];
k5=k4;
k4=i;
}
else if (a[i]>max3)
{
max3=a[i];
k5=i;
}
}
if (a[k4]*a[k4+1]>a[k4-1]*a[k4]) {max2=a[k4]*a[k4+1];k6=k4+1;}
else {max2=a[k4]*a[k4-1];k6=k4-1;}
if (a[k5]*a[k5+1]>a[k5-1]*a[k5]) {max3=a[k5]*a[k5+1];k7=k5+1;}
else {max3=a[k5]*a[k5-1];k7=k5-1;}
if (max2+max3>max1)
{
a[k4]=0;
a[k5]=0;
a[k6]=0;
a[k7]=0;
s+=max2+max3;
}
else
{
a[k1]=0;
a[k2]=0;
a[k3]=0;
s+=max1;
}
for (i=1;i<=n;i++)
s+=a[i];
g<<s;
f.close();
g.close();
return 0;
}
EDIT II:
am vazut unde buseam:D eu aflam cele mai mari 2 numere nu produsul cel mai mare a 2 numere consecutive ... mda, mersi oricum
80p, gresit testul 7 si 8 unde cred ca trebuie facut cu suma si produs de numere mari (in vector).