PDA

View Full Version : [PBINFO] Problema #3156



~Wolf~
09-11-2020, 12:37 PM
Link site: pbinfo (<b>You have to register to ba able to see this link</b>)
Link problema: perm-min-max (<b>You have to register to ba able to see this link</b>)
-algoritmul e usor, aflam minimul si maximul si indicele fiecaruia
-facem sortarea, unde sortam elementele fara elementul minim si fara elementul maxim
-ne folosim de indici in functia valid pentru ca minimul si maximul sa ramana "puncte fixe" in permutari

#include <iostream>
using namespace std;

unsigned int n,v[25],x[25],minim=1000000000,maxim,imin,imax;

void back(unsigned int);
unsigned int valid(unsigned int);
unsigned int solutie(unsigned int);
void afisare(unsigned int);
void citire();
void sortare();

int main()
{
citire();
sortare();
back(1);
return 0;
}
void citire()
{
cin>>n;
for(unsigned int i=1;i<=n;i++)
{
cin>>x[i];
if(x[i]>maxim)
{
maxim=x[i];
imax=i;
}
if(x[i]<minim)
{
minim=x[i];
imin=i;
}
}
}
void sortare()
{
for(unsigned int i=1;i<=n-1;i++)
{
if(x[i]!=minim && x[i]!=maxim)
{
for(unsigned int j=i+1;j<=n;j++)
{
if(x[j]!=minim && x[j]!=maxim)
{
if(x[i]>x[j])
{
unsigned int aux=x[i];
x[i]=x[j];
x[j]=aux;
}
}
}
}
}
}
void back(unsigned int k)
{
for(unsigned int i=1;i<=n;i++)
{
v[k]=x[i];
if(valid(k))
{
if(solutie(k))
{
afisare(k);
}
else
{
back(k+1);
}
}
}
}
unsigned int valid(unsigned int k)
{
if((v[k]==minim && k!=imin) || (v[k]==maxim && k!=imax))
{
return 0;
}
for(unsigned int i=1;i<=k-1;i++)
{
if(v[i]==v[k])
{
return 0;
}
}
return 1;
}
unsigned int solutie(unsigned int k)
{
return k==n;
}
void afisare(unsigned int)
{
for(unsigned int i=1;i<=n;i++)
{
cout<<v[i]<<' ';
}
cout<<'\n';
}