Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
int charset[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int n;
int k, i, j, new_line=0, exit;
FILE*fp;
fp=fopen("comb.txt", "w");
printf("\nInserire il valore di k: ");
scanf("%d", &k);
int index[k];
n=20;
i=0;
memset(index, 0, k *sizeof(int));
for(;;)
{
exit=1;
for(i =0; i < k; i ++)
{
fprintf(fp, "%d ", charset[index[i]]);
printf("%d ", charset[index[i]]);
if(index[i]< n - 1)
exit=0;
}
fprintf(fp, "%c", '\n');
printf("\n");
if(exit)
{
break;
}
++ index[k - 1];
for(j = k -1; j >=1; j --)
{
if(index[j]>= n)
{
index[j]=0;
++ index[j - 1];
}
}
}
fclose(fp);
return0;
}
che calcola tutte le disposizioni, funziona abbastanza bene, sicuramente si può fare di meglio, ma non è questo il punto, ora vorrei modificarlo per evitare che tra le combinazioni ci siano ripetizioni
ad esempio vorrei che la combinazione
1234 non fosse ripetuta due volte
e che combinazioni del tipo
1111 non venissero considerate
ma non ho niente in mente, voi avete qualche idea?
spero di essere stato chiaro, e in attesa di una vostra risposta vi ringrazio anticipatamente.
Ma che stai calcolando le combinazioni per win for live!? xD
Comunque una idea potrebbe anche essere che inserisci un altro vettore.Come detto da ingMark. Li inserisci di in vola in volta... controllando che il numero attuale uscito non sia presente nel vettore. Oppure fare un vettore "booleano", dove ogni numero uscito corrisponde all'indice del vettore cambiando il valore per indicare che è già presente