Problema delle tre frazioni

ToMMy!!!112
Vi pongo un piccolo quesito, che sicuramente apprezzeranno gli amanti del Sudoku.

?/?? + ?/?? + ?/?? = 1

Si tratta di sostituire per ogni punto interrogativo una cifra, in modo da ottenere 3 frazioni (numeratore una cifra, denominatore due cifre) che sommate tra loro diano come risultato 1.
Nessuna cifra può essere ripetuta: bisogna usare le cifre da 1 a 9 una ed una volta sola (come nel sudoku).

Ho letto questo problema su un forum inglese, e sinceramente non ho la soluzione. Ci sto impazzendo da un bel pò!!

Buon divertimento :P[/chesspos]

Risposte
_Tipper
Scrivo la soluzione sotto spoiler, perché l'ho trovata barando. :-D

ToMMy!!!112
gasp, e dove l'hai trovata?? io mica ci sono riuscito a barare :P

C'è una tecnica per risolverlo, che non sia andare per tentativi?

_Tipper
Io mi sono semplicemente scritto un programmino (scemo) in Java... Per quanto riguarda la tecnica per risolverlo lascio la parola ad altri più competenti di me...

alfabeto2
Se non ho fatto male i calcoli anche 9/12 + 4/80 + 7/35 dovrebbe andar bene

A.B.

_Tipper
Il risultato è $1$, ma usi lo $0$ e non il $6$...

alfabeto2
si hai ragione... .. non avevo letto bene il problema

A.B.

alvinlee881
Anch'io come Tipper ho trovato la frazione con un programmino (io in C però :-) ).
La strada matematica qual'è però?

Domè891
"alvinlee88":
Anch'io come Tipper ho trovato la frazione con un programmino (io in C però :-) ).
La strada matematica qual'è però?


ti potei gentilemente chiedere il favore di postare il codice?
mi interessebbe molto vederlo... grazie
ciao

alvinlee881
Volentieri, però non scandalizzarti se ho usato a sproposito la ricorsione, dichiarato un sacco di variabili e molto altro, l'ho fatto veramente "a braccio", giusto per trovare queste introvabili frazioni. Probabilmente può essere molto migliorato e ottimizzato (ma ci mette comunque un secondo a trovarle, chissenefrega di ottimizzare :-) !!).

CODICE:

#include
#include
void frazioni (int, double *,double *);
int main() {
int i;
printf("Calcolo delle tre frazioni tali che a/bc + x/yz+ i/jk =1\n");


double *x;
x=(double*)malloc(9*sizeof(double));

double *old;
old=(double*)malloc(9*sizeof(double));
//x e old sono 2 array di 9 elementi, dove memorizzo i numeri

frazioni(0,x,old); //chiamata funzione

return 0;
}

//DEFINIZIONE FUNZIONE: la variabile messi indica a quale numero siamo.
void frazioni(int messi,double *a, double *old){
int j,i;
//CASO BASE:
if(messi==9) { double x,y,z;
double x2,y2,z2;

x2=a[1]*10+a[2];
y2=a[4]*10+a[5];
z2=a[7]*10+a[8];
x=(double) a[0]/x2;
y=(double) a[3]/y2;
z=(double) a[6]/z2;

if(x+y+z==1) //se la frazione è giusta la stampa.
{ //STAMPA FRAZIONI
for(i=0;i<=8;i++){
if (i%3==0) {printf(" \n La %d ° frazione e' ",i/3+1);
printf("%.0f/ ",a);}
else { printf("%.0f",a);}
}
scanf("%d",&i);//primo comando che mi è venuto in mente per bloccare la funzione
}

return;
}
//FINE CASO BASE

int stop=0;

for(j=1;j<=9;j++){
int stop=0;

for(i=0;i if(j==old) stop=1;//SE STOP=1 il numero era già stato preso precedentemente, quindi ne scelgo un altro
}
if(stop==0) {//se il numero non l'avevo già preso, allora lo prendo: in pratica il for sopra serve ad assicurarmi che i 9 numeri siano distinti
a[messi]=j; old[messi]=j; frazioni(messi+1,a,old); }

}

}

P.S. consiglio di leggere e capire il codice non qui sul forum, ma sul supporto che usate (io uso Dev-C++). Comunque non è un programma difficile.

Domè891
grazie mille.. anche io uso dev... mi ci trovo bene

ciao

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.