Problema delle tre frazioni
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
[/chesspos]
?/?? + ?/?? + ?/?? = 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

Risposte
Scrivo la soluzione sotto spoiler, perché l'ho trovata barando.

gasp, e dove l'hai trovata?? io mica ci sono riuscito a barare 
C'è una tecnica per risolverlo, che non sia andare per tentativi?

C'è una tecnica per risolverlo, che non sia andare per tentativi?
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...
Se non ho fatto male i calcoli anche 9/12 + 4/80 + 7/35 dovrebbe andar bene
A.B.
A.B.
Il risultato è $1$, ma usi lo $0$ e non il $6$...
si hai ragione... .. non avevo letto bene il problema
A.B.
A.B.
Anch'io come Tipper ho trovato la frazione con un programmino (io in C però
).
La strada matematica qual'è però?

La strada matematica qual'è però?
"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
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.

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(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.
grazie mille.. anche io uso dev... mi ci trovo bene
ciao
ciao