[Algoritmi] Soluzione ammissibile
Salve a tutti, premetto che non so se ho inserito la domanda nel posto giusto, in ogni caso scrivo.
Ho il seguente problema: data la seguente equazione
Res = (2x1 + 4x2 + 6x3 + 10x4 + 15x5 + 20x6 + 25x7)
vorrei sapere se è possibile, dato un certo Res, determinare se esiste almeno una soluzione.
Sia Res che le varie x possono assumere solo valori interi.
In alternativa alla soluzione matematica mi andrebbe bene anche un algoritmo, tra i vari che ho provato quello che "funziona" meglio è il seguente ma per alcuni valori non restituisce il valore giusto
per testarlo con i valori che mi servono lo chiamo così:
Grazie in anticipo, Simone.
Ho il seguente problema: data la seguente equazione
Res = (2x1 + 4x2 + 6x3 + 10x4 + 15x5 + 20x6 + 25x7)
vorrei sapere se è possibile, dato un certo Res, determinare se esiste almeno una soluzione.
Sia Res che le varie x possono assumere solo valori interi.
In alternativa alla soluzione matematica mi andrebbe bene anche un algoritmo, tra i vari che ho provato quello che "funziona" meglio è il seguente ma per alcuni valori non restituisce il valore giusto
BYTE values [7] = {2, 4, 6, 10, 15, 20, 25}; bool checkWin(DWORD toWin, BYTE idx) { bool res; WORD bet = Game_getTotBet(); WORD val = toWin/(values[idx]*bet); WORD resto = toWin%(values[idx]*bet); if (resto && val) resto = toWin - values[idx]*bet; for (BYTE i = 0; i < 6; i++) { if ( (toWin % (values[i]*bet)) == 0 ) return true; } if (resto == 0) res = true; else if ( resto != toWin && idx < 6) res = checkWin(resto, idx + 1); else if ( resto == toWin ) res = checkWin(toWin - (values[idx]*bet), 0); else res = false; return res; }
per testarlo con i valori che mi servono lo chiamo così:
BYTE num = (rand()%250) + 1; checkWin(num*100, 0);
Grazie in anticipo, Simone.
Risposte
L'equazione che fornisci $Res = 2x_1 + 4x_2 + 6x_3 + 10x_4 + 15x_5+20x_6+25x_7$
Può essere riscritta come $Res = 2(x_1 + 2x_2 + 3x_3 +5x_4 + 10x_6)+5(3x_5+5x_7)$
Se $Res = 0$ vuol dire che ogni coefficiente è $0$.
Se $Res$ è pari allora $x_1 = \frac{Res}{2}$ e tutte le altre $x$ hanno valore zero.
Se $Res$ è dispari allora $x_1 = \frac{Res-15}{2}$ e $x_5 = 1$ e tutte le altre $x$ hanno valore zero.
Il tutto vale anche per valori di $Res$ negativi.
Quindi sì, esiste sempre almeno una soluzione con valori interi per le $x$.
Esempio:
$Res = 234567$
Dato che è dispari, si avrà che $x_1 = \frac{234567-15}{2}$ e $x_5 = 1$ con tutte le altre $x$ a zero.
Può essere riscritta come $Res = 2(x_1 + 2x_2 + 3x_3 +5x_4 + 10x_6)+5(3x_5+5x_7)$
Se $Res = 0$ vuol dire che ogni coefficiente è $0$.
Se $Res$ è pari allora $x_1 = \frac{Res}{2}$ e tutte le altre $x$ hanno valore zero.
Se $Res$ è dispari allora $x_1 = \frac{Res-15}{2}$ e $x_5 = 1$ e tutte le altre $x$ hanno valore zero.
Il tutto vale anche per valori di $Res$ negativi.
Quindi sì, esiste sempre almeno una soluzione con valori interi per le $x$.
Esempio:
$Res = 234567$
Dato che è dispari, si avrà che $x_1 = \frac{234567-15}{2}$ e $x_5 = 1$ con tutte le altre $x$ a zero.
Grazie mille, con un paio di accorgimenti funziona alla grande!