La
solución de Telcontar:
Me
complace confirmar que la respuesta de Nazgul2 es completamente correcta,
hecha además de un razonamiento completamente diferente al mío. Felicidades
Nazgul2 y esperemos que te asignen una cátedra en la UAN
como desfacedor de entuertos, que en cuento a mi me conformo con la
diversión de ver vuestras evoluciones, aunque tu no has necesitado
ninguna ayuda por mi parte, así que para que ser humilde cuando no
debes serlo.
Yo lo hice mediante fuerza bruta con un programa que me hice en C++,
ahora lo he rehecho en Java.
Básicamente me sacaba todas las parejas que cumplían las dos condiciones.
Para ello eliminaba probaba todas las combinaciones posibles de números
y
sacaba Suma y Producto. Depués:
1) Descartaba las parejas cuya S o P solo se formaban de una manera.
2) Descomponía S y eliminaba las parejas formadoras de S cuyo producto
solo se pudiera hacer de una manera.
3) Con las parejas que que quedaran, descomponía P en sus parejas
generadoras (llamémosle conjunto GP, cuya cardinalidad debía ser siempre
mayor que uno por haber pasado la condición primera), hallaba la suma
S'
para cada miembro de GP, hallaba las parejas generadoras de S' y con
cada
una de esas parejas hallo P', si P' solo se puede hallar de una manera
es
que la solución no es ese miembro de GP, lo elimino de GP. Si después
de
revisados todos los miembros de GP, GP me queda de cardinalidad 1,
esa es
una posible solución.
Con este algoritmo que es mas difícil de explicar que de comprender
sobre un papel me salen las parejas
1+6=7
1+8=9
2+7=9
4+5=9
3+8=11
4+7=11
2+11=13
4+9=13
5+8=13
6+7=13
Como solo hay una pareja que sume distinta que las demás, esa es la
solución.
Por cierto, tu solución es sin duda mas elegante, pero que quieres
que le
haga, soy informático.
Ahí va el código fuente que he rehecho en Java para quien lo quiera,
no incluyo la clase pareja que simplemente sirve para contener una
pareja de números, por cierto, aborrezco los comentarios y la programación
clara:
package proyecto;
import java.util.Vector;
public class Problema {
public Problema(){
}
public Vector buscarParejasGeneradorasSuma(int numero){
Vector v=new Vector();
Pareja p;
for (int i=1;i<(numero-i);i++){
if (i<26&&(numero-i)<26){
p=new Pareja(i,numero-i);
v.add(p);
}
}
return v;
}
public Vector buscarParejasGeneradorasProducto(int numero){
Vector v=new Vector();
Pareja p;
for (int i=1;i<(numero/i);i++){
if (numero%i==0 && i<26&&(numero/i)<=25){
p=new Pareja(i,numero/i);
v.add(p);
}
}
return v;
}
public boolean descartarPareja(int x,int y){
int s=x+y;
int p=x*y;
Problema problema=new Problema();
Vector v1=problema.buscarParejasGeneradorasSuma(s);
Vector v2=problema.buscarParejasGeneradorasProducto(p);
if (v1.size()==1 || v2.size()==1){
return false;
}
else
return true;
}
public static void main(String[] args) {
Problema problema=new Problema();
for (int i=1;i<25;i++){
for (int j=i+1;j<26;j++){
int s=i+j;
int p=i*j;
boolean bol=problema.descartarPareja(i,j);
if (bol){
boolean bol2=true;
Vector vs=problema.buscarParejasGeneradorasSuma(s);
for(int cont=0;cont<vs.size();cont++){
Pareja pareja1=(Pareja)vs.elementAt(cont);
int p2=pareja1.x*pareja1.y;
Vector vp=problema.buscarParejasGeneradorasProducto(p2);
if (vp.size()==1)
bol2=false;
}
if (bol2){
Vector vp1=problema.buscarParejasGeneradorasProducto(p);
int tamanyo=vp1.size();
for (int cont=0;cont<vp1.size();cont++){
Pareja pareja1=(Pareja)vp1.elementAt(cont);
int s2=pareja1.x+pareja1.y;
Vector vs1=problema.buscarParejasGeneradorasSuma(s2);
if (vs1.size()==1)
tamanyo--;
else{
boolean bol3=false;
for (int cont2=0;cont2<vs1.size();cont2++){
Pareja pareja2=(Pareja)vs1.elementAt(cont2);
int p3=pareja2.x*pareja2.y;
Vector vp2=problema.buscarParejasGeneradorasProducto(p3);
if (vp2.size()==1)
bol3=true;
}
if (bol3)
tamanyo--;
}
}
if (tamanyo==1)
System.out.println(i+" "+j);
}
}
}
}
byte[] b=new byte[10];
try{
System.in.read(b);
}catch(java.io.IOException e){
System.out.println(e.getMessage());
}
}
}
Telcontar