Problem 33: Ziffern kürzende Brüche

Gesucht sind die vier Brüche, deren Zähler und Nenner zweistellig sind, die kleiner als 1 sind und in denen man Ziffern entfernen kann (entgegen der Regeln des Kürzen) und dennoch als Ergebnis einen gleichwertigen Bruch erhält! [ das englische Original ]

Dieses Problem lässt sich relativ einfach lösen, in dem man zwei Schleifen in einander verschachtelt, um den Zähler (z) und Nenner (n) entsprechend der genannten Regeln wandern zu lassen. Dabei gelten die Bereiche von 10 < z < 100 und z < n < 100. Nun muss man nur noch die trivialen Lösungen ausschließen und schon findet man die gewünschten Brüche:

@Override
public String solve() {
 
   int resNum = 1;
   int resDen = 1;
 
   int num = 11;
 
   while( num < 100 ) {
      int n1 = num / 10;
      int n2 = num % 10;

      int den = num+1;
 
      while( den < 100 ) {
         int d1 = den / 10;
         int d2 = den % 10;
 
         // only check non-trivial solutions
         if( ( n2 != 0 ) || ( d2 != 0 ) ) {
 
            if( ( n1 == d1 ) && ( num*d2 == den*n2 ) ) {
               IO.debugln( "found " + num + "/" + den + " = " + n2 + "/" + d2 );
               resNum *= n2;
               resDen *= d2;
            }
 
            if( ( n1 == d2 ) && ( num*d1 == den*n2 ) ) {
               IO.debugln( "found " + num + "/" + den + " = " + n2 + "/" + d1 );
               resNum *= n2;
               resDen *= d1;
            }
 
            if( ( n2 == d1 ) && ( num*d2 == den*n1 ) ) {
               IO.debugln( "found " + num + "/" + den + " = " + n1 + "/" + d2 );
               resNum *= n1;
               resDen *= d2;
            }
 
            if( ( n2 == d2 ) && ( num*d1 == den*n1 ) ) {
               IO.debugln( "found " + num + "/" + den + " = " + n1 + "/" + d1 );
               resNum *= n1;
               resDen *= d1;
            }
         }
 
         den++;
      }
 
      num++;
   }
 
   int fak = Mathe.getGCD( resNum, resDen );
   resNum /= fak;
   resDen /= fak;
 
   return resNum + "/" + resDen;
}

Da als Ergebnis der Nenner des (gekürzten) Produktes der vier Brüche ausgegeben werden soll, habe ich die Mathe-Hilfsklasse um eine Methode zur Bestimmung des „Größten Gemeinsamen Teilers“ (ggT) ergänzt.

Den vollständigen Quellcode der Klasse für die Lösung des Problems 33 kann man sich hier anschauen!

<< Problem 32 Übersicht Problem 34 >>

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: