Cerinţa
Se dau n
numere naturale. Determinaţi o aranjare a acestor numere pe un cerc, astfel încât suma produselor de câte două numere vecine să fie maximă.
Date de intrare
Fişierul de intrare cerc.in
conţine pe prima linie numărul n
, iar pe a doua linie cele n
numere naturale, separate prin spaţii..
Date de ieşire
Fişierul de ieşire cerc.out
va conţine pe prima linie cele n
numere, în ordinea determinată, separate prin exact un spaţiu.
Restricţii şi precizări
1 ≤ n ≤ 10
- cele
n
numere vor avea cel mult2
cifre - dacă există mai multe modalităţi de aranjare a numerelor astfel încât să se obţină aceeaşi sumă maximă, se va determina cea lexicografic minimă
Exemplu
cerc.in
5 1 2 3 4 5
cerc.out
1 2 4 5 3
Explicație
1*2 + 2*4 + 4*5 + 5*3 + 3*1 = 48
, şi este suma maximă care se poate obţine.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Cerc:
#include <fstream>
#include <iostream>
using namespace std;
int x[11], xmax[11], uz[11], a[11] ,n , smax;
ifstream fin("cerc.in");
ofstream fout("cerc.out");
void back(int k){
for(int i=1 ; i<=n ; ++i)
if(uz[i]==0)
{
uz[i]=1;
x[k]=i;
if(k==n){
int s = a[x[n]]*a[x[1]];
for( int j=1;j<n;j++)
s += a[x[j]]*a[x[j+1]];
if(s>smax){
smax = s;
for(int j=1; j<=n;++j)
xmax[j]=x[j];
}
}
else
back(k+1);
uz[i]=0;
}
}
int main(){
fin>>n;
for(int i=1;i<=n;++i)
fin >> a[i];
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
if(a[i]>a[j]){
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
x[1]=1, uz[1] = 1;
back(2);
for(int i=1;i<=n;++i)
fout << a[xmax[i]] << " ";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #318 Cerc
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #318 Cerc de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!