Salve a tutti ho fatto questo programma che stampa le combinazioni di un nome in ordine, dalla prima all'ultima. Un esempio scrivo "Manuel",metto k=3, stampa man-mau-mae-mal-mnu-mne-mnl-mue-mul-mel. In pratica sposta sempre di uno l'ultima lettera. Se avessi messo il k=4, avrebbe stampato manu-mane-ecc.. Se avessi messo il k=2 allora ma-mn-mu-me-ecc..
Funziona bene il programma solo che dovrebbe stampare altre combinazioni in più ovvero quelle eliminando la m, quindi anu-ane-anl.
In pratica dovrei sommare le combinazioni che mi vengono di manuel più le combinazioni di anuel più le combinazioni di nuel più quelle di uel.
Purtroppo non riesco ad eliminare la m e fargli stampare le successive combinazioni.
Per stamparle tutte devo scrivere manuel, poi rifar partire il programma e scrivere anuel, rifarlo partire e scrivere nuel così via. Invece vorrei che me le stampasse tutte quante solo scrivendo manuel. Le combinazioni infatti se le sommo vengono 20 che corrispondono se le calcolo con il binomio di newton.
#include <iostream>
using namespace std;
char v[50];
int p;
int i2;
int i;
int n;
int k;
int e;
int f;
int q;
char z;
int t;
int y;
int s;
int main()
{
cout<<"Inserisci il numero di caratteri del nome: ";
cin>>n;
q=n;
cout<<"Inserisci il nome di "<<n<<" lettere: ";
for(i=0;i<n;i++){
cin>>v[i];}
cout<<"Inserisci il numero di elementi che deve avere ogni combinazione: ";
cin>>k;
cout<<"Le possibili combinazioni sono: "<<endl;
for(p=0;p!=q-2;p++){
s=k;
t=k;
f=k;
y=k;
z=v[y-1];
for(e=0;e<n+1-k;e++){
i=0;
do{
cout<<v[i];
i=i+1;}
while(i!=k);
cout<<endl;
v[s-1]=v[t];
t=t+1;
}
v[y-1]=z;
y=y+1;
for(i2=0;i2<n+1-k;i2++){
v[f-2]=v[f-1];
f=f+1;}
v[n-1]=0;
n=n-1;
cout<<endl;
}
system("pause");
return 0;
}