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
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
#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
Limba română,
8 ani în urmă
Informatică,
8 ani în urmă
Engleza,
8 ani în urmă
Ed. tehnologică,
9 ani în urmă
Matematică,
9 ani în urmă
Geografie,
9 ani în urmă