Java egyperces – Átlók megoldása

Csak akkor olvass tovább, ha a Átlók feladatot megoldottad, vagy nem sikerült megoldani.

Az alap feladatot a fenti linken megtalálod. A megoldást úgy adom meg, hogy egy meret nevű változóba meg lehet adni a négyzet méretét, amelyben meg kell keresni a legnagyobb összegű átlót.

/**
 *
 * @author http://webotlet.hu
 */
package webotlet_atlok;

public class Webotlet_Atlok
{

  public static void main(String[] args)
  {
// a matrix meretenek megadasa
    int meret = 10;
    int[][] matrix = new int[meret][meret];

// a matrix feltoltese es kiiratasa
    for (int i = 0; i < matrix.length; i++)
    {
      for (int j = 0; j < matrix[i].length; j++)
      {
        matrix[i][j] = (int) (Math.random() * 100);
      }
    }
    kiir(matrix);

// itt tarolom majd a maximum osszegu atlo kezdopontjanak
// koordinatait, es az osszeget  { x, y, osszeg }
    int[] max = new int[3];

    int osszeg = 0;

// azokat az atlokat vizsgalom, ahol a kezdopont
// az elso sorban van
    for (int j = 0; j < matrix[0].length; j++)
    {
      int i = 0;
// a k valtozoban tarolom, hogy hany mezovel haladtam dk-i iranyba
      int k = 0;
      osszeg = 0;
      System.out.print("Atlo kezdopont: " + i + "," + j);
      do
      {
        osszeg += matrix[i + k][j + k];
        k++;
      }
      while (i + k < meret && j + k < meret);
      System.out.println(" osszeg: " + osszeg);
      if (osszeg > max[2])
      {
        max[0] = i;
        max[1] = j;
        max[2] = osszeg;
      }
    }

// azokat az atlokat vizsgalom, ahol a kezdopont
// az elso oszlopban van
// (a 0,0 koordinataju atlot nem szamolom ki megegyszer)
    for (int i = 1; i < matrix.length; i++)
    {
      int j = 0;
// a k valtozoban tarolom, hogy hany mezovel haladtam dk-i iranyba
      int k = 0;
      osszeg = 0;
      System.out.print("Atlo kezdopont: " + i + "," + j);

      do
      {
        osszeg += matrix[i + k][j + k];
        k++;
      }
      while (i + k < meret && j + k < meret);

      System.out.println(" osszeg: " + osszeg);
      if (osszeg > max[2])
      {
        max[0] = i;
        max[1] = j;
        max[2] = osszeg;
      }
    }

    System.out.println("max: " + max[2] + " helye: " + max[0] + "," + max[1]);
  }

  public static void kiir(int[][] tomb)
  {
    for (int i = 0; i < tomb.length; i++)
    {
      for (int j = 0; j < tomb[i].length; j++)
      {
        System.out.print(String.format("%3d", tomb[i][j]));
      }
      System.out.println();
    }
  }

}

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez a weboldal az Akismet szolgáltatását használja a spam kiszűrésére. Tudjunk meg többet arról, hogyan dolgozzák fel a hozzászólásunk adatait..