👤

În c++ vă rog:

Cutii. Al Bundy este în dificultate! Are n + 1 cutii de pantofi și n perechi de pantofi identificate prin valorile 1, 2, ..., n (n perechi sunt așezate în n cutii, iar o cutie este liberă). Dar, din păcate, pantofii nu se află la locurile lor. Până să vină Gary (șefa lui), Bundy trebuie să potrivească pantofii în cutii. Dar pentru că Gary poate să apară în orice clipă și Bundy nu vrea să fie prins că nu își face treaba cum trebuie, aranjarea pantofilor trebuie făcută rapid și în așa fel încât să nu trezească bănuieli; prin urmare, dacă scoate o pereche de pantofi dintr-o cutie, trebuie să o pună imediat în cutia liberă. Ajutați-l pe Al Bundy să aranjeze pantofii la locurile lor printr-un număr minim de mutări.

Date de intrare: Prima linie a fișierului de intrare date.in conține numărul n de cutii. Linia a doua conține n + 1 numere distincte, separate prin câte un spațiu, reprezentând dispunerea inițială a perechilor de pantofi în cutiile numerotate de la 1 la n + 1. Printre cele n + 1 numere unul singur are valoarea 0 și corespunde cutiei goale. Linia a treia conține n + 1 numere separate prin câte un spațiu, reprezentând configurația finală cerută, în care valoarea 0 se află pe poziția căruia îi corespunde cutia goală.

Date de ieșire: Fișierul de ieșire date.out va conține pe prima linie un număr întreg k, reprezentând numărul minim de mutări.

Restricții și precizări:

- 1 < n < 100.


Exemplu:

date.in 4

3 4 1 0 2

4 0 2 1 3

date.out 4

Explicații:

Mutarea 1: perechea 1 se mută din cutia 3 în cutia 4

Mutarea 2: perechea 2 se mută din cutia 5 în cutia 3

Mutarea 3: perechea 3 se mută din cutia 1 în cutia 5

Mutarea 4: perechea 4 se mută din cutia 2 în cutia 1


Răspuns :

#include <iostream.h>
#include <fstream.h>
int main(){
int n1,n2,n3,n4,n5;
int f1,f2,f3,f4,f5,k;
ifstream in("DATEIN.TXT");
in >> n1;
in >> n2;
in >> n3;
in >> n4;
in >> n5;
in >> f1;
in >> f2;
in >> f3;
in >> f4;
in >> f5;
cout << n1 << " " << n2 << " " << n3 <<" "<< n4 <<" "<< n5 <<" " << "\n";
cout << f1 << " " << f2 << " " << f3 <<" "<< f4 <<" "<< f5 <<" " << "\n";
in.close();
k=0;
if (f1!=n1)
{
k=k+1;
}
if (f2!=n2)
{
k=k+1;
}
if (f3!=n3)
{
k=k+1;
}
if (f4!=n4)
{
k=k+1;
}
if (f5!=n5)
{
k=k+1;
}
ofstream out("DATEOUT.TXT");
out<<k<< endl;
system("pause");
return 0;
}
C++
#include <iostream>
#include <fstream>
using namespace std;

struct elem{
int poz_init,poz_final;
}cutii[100];
int nr_mutari;
//pentru afisare daca este nevoie

void afisare(elem v[],int n);

int cauta_elem(elem v[],int n,int x){
int i;
for(i=0;i<=n;i++){
if(v[i].poz_init==x){
return i;
}
}
}


void det_mutari(elem v[],int n){
int i,index_zero,temp,index_elem,ok=1;
index_zero=cauta_elem(v,n,0);
if(v[index_zero].poz_final>0){
index_elem=cauta_elem(v,n,v[index_zero].poz_final);
temp=v[index_zero].poz_init;
v[index_zero].poz_init=v[index_elem].poz_init;
v[index_elem].poz_init=temp;
nr_mutari++;
ok=0;
}
else{
for(i=0;i<=n;i++){
if(v[i].poz_init!=v[i].poz_final){
temp=v[index_zero].poz_init;
v[index_zero].poz_init=v[i].poz_init;
v[i].poz_init=temp;
nr_mutari++;
ok=0;
break;
}
}
}
//afisare(v,n);
if(ok==0){
det_mutari(v,n);
}
}

void afisare(elem v[],int n){
int i;
for(i=0;i<=n;i++){
cout<<v[i].poz_init<<" ";
}
cout<<endl;
}

int main(){
int i,n;//,gol_potrivit=1,pozitii_init[100],pozitii_finale[100],nepotriviri=0;
ifstream fid("date.in");
ofstream fod("date.out");
fid>>n;
for(i=0;i<=n;i++){
fid>>cutii[i].poz_init;
}
for(i=0;i<=n;i++){
fid>>cutii[i].poz_final;
}
//afisare(cutii,n);
det_mutari(cutii,n);
fod<<nr_mutari;
return 0;
}

Pascal
program cauta_copii;

type elem=record
   poz_init,poz_final:integer;
end;
var nr_mutari:integer;
type vec_elem=array[1..100] of elem;

procedure afisare(v:vec_elem;n:integer);
var i:integer;
begin
  writeln('!!');
  for i:=1 to n+1 do
    write(v[i].poz_init,' ');
 
  writeln;
end;

function cauta_elem(v:vec_elem;n,x:integer):integer;
var i:integer;
begin
  for i:=1 to n+1 do
    if v[i].poz_init=x then
      cauta_elem:=i;
end;

procedure det_mutari(v:vec_elem;n:integer);
var i,index_zero,temp,index_elem,ok:integer;
begin
  ok:=1;
  index_zero:=cauta_elem(v,n,0);
  if v[index_zero].poz_final>0 then
     begin
      index_elem:=cauta_elem(v,n,v[index_zero].poz_final);
      temp:=v[index_zero].poz_init;
      v[index_zero].poz_init:=v[index_elem].poz_init;
      v[index_elem].poz_init:=temp;
      inc(nr_mutari);
      ok:=0;
     end
  else
    for i:=1 to n+1 do
      if v[i].poz_init<>v[i].poz_final then
        begin
      temp:=v[index_zero].poz_init;
      v[index_zero].poz_init:=v[i].poz_init;
      v[i].poz_init:=temp;
      inc(nr_mutari);
      ok:=0;
        end;
   //afisare(v,n);    
   if ok=0 then
     det_mutari(v,n);    
end;



var
  fisierIntrare,fisierIesire:string;
  tfIn,tfOut:Text;
  i,n:integer;
  cutii:vec_elem;
begin
  fisierIntrare:='date.in';
  fisierIesire:='date.out';
  AssignFile(tfIn,fisierIntrare);
  reset(tfIn);
  read(tfIn,n);
  for i:=1 to n+1 do
    read(tfIn,cutii[i].poz_init);
  for i:=1 to n+1 do
    read(tfIn,cutii[i].poz_final);
 
 //afisare(cutii,n);
  nr_mutari:=0;
  det_mutari(cutii,n);
  AssignFile(tfOut,fisierIesire);
  rewrite(tfOut);
  writeln(tfOut,nr_mutari);
  close(tfOut);
end.