La traccia dell'esercizio é:
"Dato un numero N, trova tutte le combinazioni di 3 numeri che, sommati, danno N. Suggerimento: usa 3 cicli for annidati".
Ho scritto un codice che funziona:
// Legge un intero positivo n e trova tutte le combinazioni di
// tre numeri la cui somma da' n
#include <stdio.h>
int main(void)
{
// n e' la somma dei tre numeri; a, b e x sono i tre numeri che, sommati,
// danno n; tot e' il numero totale delle combinazioni trovate
int n, a, b, x, tot = 0;
printf("Digita un intero positivo: ");
scanf("%d", &n);
for (a = 0; a <= n; ++a)
{
b = 0;
for (b = 0; b <= n; ++b)
{
x = n - a - b;
if (x < 0) { break;}
++tot;
printf("%d = %d + %d + %d\n", n, a, b, x);
}
}
printf("\nLe combinazioni sono: %d", tot);
return 0;
}
Ma il mio codice trova anche le combinazioni equivalenti (ad esempio 3 = 0 + 1 + 2 e 3 = 2 + 1 + 0) come potete vedere da questo esempio di output:
Digita un intero positivo: 3
3 = 0 + 0 + 3
3 = 0 + 1 + 2
3 = 0 + 2 + 1
3 = 0 + 3 + 0
3 = 1 + 0 + 2
3 = 1 + 1 + 1
3 = 1 + 2 + 0
3 = 2 + 0 + 1
3 = 2 + 1 + 0
3 = 3 + 0 + 0
Le combinazioni sono: 10
Come potrei migliorare il mio codice per eliminare le ripetizioni (senza usare array che non ho ancora studiato)?
Tra l'altro la traccia dell'esercizio consigliava di usare 3 cicli for annidati, io ne ho usati solo due il ché mi sembra strano...