Informatică, întrebare adresată de CristyNicolaescu, 9 ani în urmă

80 puncteeee !!!!!!! Se citeşte de la tastatură un număr natural n (1<=n<=10). Să se afişeze în fişierul “permut.out”, câte una pe linie, toate permutările numerelor de
la 1 la n. ( IN LIMBAJUL C ) DAU COROANA !!!!

Răspunsuri la întrebare

Răspuns de antonii
1
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;

void Calculate(vector <int> LeftArr,vector <int> GenArr,int Position=1);
void ReplaceAdd(vector <int> &Arr,int Position,int Nr);
void DeleteNrFromArr(vector <int> Arr,vector <int> &ResArr,int Nr);
int RemainedVal(vector <int> &Arr);

int main(){
        int n=0;

        vector <int> a;
        vector <int> b;

        cin>>n;

        for(int x=0;x<n;x++){
                a.push_back(x+1);
        }

        Calculate(a,b);

        system("pause");
        return 0;
}

//MaxVal is n and Position the position of the 'void' in the array to help the algorithm know where it is 
// and how many elements are left in the LeftArr
void Calculate(vector <int> LeftArr,vector <int> GenArr,int Position){
        int MaxVal=LeftArr.size();
        vector <int> TempArr;

        if(Position!=MaxVal){
                for(int y=0;y<MaxVal;y++){
                        if(LeftArr[y]!=0) {
                                DeleteNrFromArr(LeftArr,TempArr,LeftArr[y]);
                                ReplaceAdd(GenArr,Position,LeftArr[y]);

                                Calculate(TempArr,GenArr,Position+1);
                        }
                }
        }else{
                if(RemainedVal(LeftArr)) {
                        ReplaceAdd(GenArr,Position,RemainedVal(LeftArr));
                        
                        for(int w=0;w<MaxVal;w++) cout<<GenArr[w];
                        cout<<endl;
                  }
         }
}

void ReplaceAdd(vector <int> &Arr,int Position,int Nr){
         if(Arr.size()==0 || Arr.size()<=Position-1)
 
                Arr.push_back(Nr);
        else
 
                Arr[Position-1]=Nr;
}

void DeleteNrFromArr(vector <int> Arr,vector <int> &ResArr,int Nr){
        ResArr=Arr;
        
        for(int z=0;z<Arr.size() ;z++)
                  if(Arr[z]==Nr) ResArr[z]=0;
}

int RemainedVal(vector <int> &Arr){
        for(int i=0;i<Arr.size();i++)
 
                if(Arr[i]!=0){
  
                return Arr[i];
  
                
                continue;
          }
}

Stiu ca pare putin cam complicat...dar in principiu e simplu. Ca sa faci permutari ai nevoie de mai multe for-uri in functie de cate nr. ai introdus. Ex de la 1 la 3 ai nevoie de 3 for-uri care insa sa nu dea acelasi numar ca cel din urma...adica for(x=1;x<=3;x++){ for(y=1;y<=3;y++){if(x!=y) for(z=1;z<=3;z++){ if(x!=y!=z) cout<<<x<<y<<z; sau mai rapid for(x=1;x<4;x++) for(y=1;y<4;y++) for(z=1;z<4;z++) if(x!=y!=z) cout<<x<<y<<z; 
     
      Insa tu poti sa schimbi 3 in 10,de exemplu. Deci nu poti sa pui un nr. fix de for.-uri. totul e facut virtual apeland de mai multe ori o functie care contine de obicei un for ,de n-ori


silviki: daaaa
Alte întrebări interesante