Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1.  
  2. import java.io.*;
  3. import java.io.File;
  4. import java.io.PrintWriter;
  5. import java.util.*;
  6. public class Main {
  7.  
  8.     public static void main(String[] args) {
  9.  
  10.         Paliwo paliwo = new Paliwo();
  11.     }
  12. }
  13. class Krysztal
  14. {
  15.     public int[] x = new int[3];
  16.     public ArrayList<Integer> uzyteId = new ArrayList<Integer>();
  17.  
  18.     public Krysztal()
  19.     {
  20.         x[0] = 0;
  21.         x[1] = 0;
  22.         x[2] = 0;
  23.     }
  24.  
  25.     public Krysztal(int aaa)
  26.     {
  27.         x[0] = aaa;
  28.     }
  29.  
  30.     public void dodajId(int id)
  31.     {
  32.         uzyteId.add(id);
  33.     }
  34. }
  35. class Paliwo
  36. {
  37.     public int iloscKrysztalow;
  38.  
  39.     public Paliwo()
  40.     {
  41.  
  42.         StreamReader plik = new StreamReader("in.txt");
  43.         iloscKrysztalow = Convert.ToInt32(Console.ReadLine());
  44.         //iloscKrysztalow = Convert.ToInt32(plik.ReadLine());
  45.         plik.ReadLine();
  46.         Krysztal[] krysztaly = new Krysztal[iloscKrysztalow];
  47.         ArrayList<Krysztal> krysztal2 = new ArrayList<Krysztal>();
  48.  
  49.         int nr = 0;
  50.         String bufor;
  51.         while ((bufor = plik.ReadLine()) != null)
  52.         {
  53.             bufor = bufor + ' ';
  54.             Krysztal buforKrysztal = new Krysztal();
  55.             int id = 0;
  56.  
  57.             for (int i = 0; i < bufor.Length - 1; i += 2)
  58.             {
  59.                 if (Char.IsDigit(bufor[i + 1]) == true)
  60.                 {
  61.                     buforKrysztal.x[id] = (Convert.ToInt32(bufor[i]) - 48) * 10 + Convert.ToInt32(bufor[i + 1]) - 48;
  62.                     i++;
  63.                     id++;
  64.                 }
  65.                 else
  66.                 {
  67.                     buforKrysztal.x[id] = Convert.ToInt32(bufor[i]) - 48;
  68.                     id++;
  69.                 }
  70.             }
  71.  
  72.             krysztaly[nr] = buforKrysztal;
  73.             krysztal2.add(buforKrysztal);
  74.             krysztaly[nr].dodajId(nr);
  75.             nr++;
  76.         }
  77.  
  78.         plik.Close();
  79.  
  80.         int maks = maxTon(krysztaly);
  81.         for (int i = maks; i > 0; i--)
  82.         {
  83.             System.out.println("Witam");
  84.             sprawdzanie(i, krysztaly, krysztal2);
  85.         }
  86.     }
  87.  
  88.     public void sortowanie(Krysztal[] krysztaly)
  89.     {
  90.         for (int i = 0; i < iloscKrysztalow; i++)
  91.         {
  92.             for (int j = 1; j < iloscKrysztalow; j++)
  93.             {
  94.                 int sumaG = 0, sumaD = 0;
  95.                 sumaG = krysztaly[j - 1].x[0] + krysztaly[j - 1].x[1] + krysztaly[j - 1].x[2];
  96.                 sumaD = krysztaly[j].x[0] + krysztaly[j].x[1] + krysztaly[j].x[2];
  97.  
  98.                 if (sumaG < sumaD)
  99.                 {
  100.                     Krysztal bufor = new Krysztal();
  101.                     bufor = krysztaly[j];
  102.                     krysztaly[j] = krysztaly[j - 1];
  103.                     krysztaly[j - 1] = bufor;
  104.                 }
  105.             }
  106.         }
  107.     }
  108.  
  109.     public int maxTon(Krysztal[] krysztaly)
  110.     {
  111.         int wynik = 0;
  112.         Krysztal czek = new Krysztal();
  113.         for (int i = 0; i < krysztaly.length; i++)
  114.         {
  115.             czek.x[0] += krysztaly[i].x[0];
  116.             czek.x[1] += krysztaly[i].x[1];
  117.             czek.x[2] += krysztaly[i].x[2];
  118.         }
  119.  
  120.         if (czek.x[0] < czek.x[1]) wynik = czek.x[0];
  121.         else wynik = czek.x[1];
  122.         if (wynik > czek.x[2]) wynik = czek.x[2];
  123.         if (wynik > 100) wynik = 100;
  124.  
  125.         return wynik;
  126.     }
  127.  
  128.     public boolean check(Krysztal krysztal, Krysztal[] buff)
  129.     {
  130.         boolean wynik = false;
  131.         int x = 0, y = 0, z = 0;
  132.  
  133.         for (int i = 0; i < iloscKrysztalow; i++)
  134.         {
  135.             if (krysztal.uzyteId.contains(i) == true)
  136.             {
  137.                 x += buff[i].x[0];
  138.                 y += buff[i].x[1];
  139.                 z += buff[i].x[2];
  140.             }
  141.         }
  142.  
  143.         //Console.WriteLine(x + " " + y + " " + z);
  144.         if (x == y && y == z) wynik = true;
  145.         if (wynik == true)
  146.         {
  147.             System.out.println("Zdobyta ilosc paliwa: " + x * 3);
  148.             System.out.println("Kupione kryształy: " + krysztal.uzyteId.size());
  149.         }
  150.         return wynik;
  151.     }
  152.  
  153.     public int sprawdzanie(int maxTon, Krysztal[] buff, ArrayList<Krysztal> buff2)
  154.     {
  155.         ArrayList<Krysztal> krzystal2 = new ArrayList<Krysztal>();
  156.         int czyDalej = 0;
  157.  
  158.         for (int i = 0; i < buff2.size(); i++)
  159.         {
  160.             for (int j = 0; j < iloscKrysztalow; j++)
  161.             {
  162.                 if (buff2.get(i).uzyteId.contains(j) == true) continue;
  163.                 int xd = buff2.get(i).x[0] + buff[j].x[0];
  164.                 if (xd > maxTon) continue;
  165.  
  166.                 Krysztal dodatkowy = new Krysztal();
  167.  
  168.                 for (int k = 0; k < iloscKrysztalow; k++)
  169.                 {
  170.                     if (buff2.get(i).uzyteId.contains(k)) dodatkowy.dodajId(k);
  171.                 }
  172.                 dodatkowy.x[0] = xd;
  173.  
  174.                 krzystal2.add(dodatkowy);
  175.                 krzystal2.get(krzystal2.size() - 1).dodajId(j);
  176.                 czyDalej++;
  177.  
  178.                 if (xd == maxTon)
  179.                 {
  180.                     if (check(dodatkowy, buff) == true)
  181.                     {
  182.                         return 0;
  183.                     }
  184.                     continue;
  185.                 }
  186.             }
  187.         }
  188.  
  189.         if (czyDalej != 0) sprawdzanie(maxTon, buff, krzystal2);
  190.         return 0;
  191.     }
  192.  
  193.     public void wypisz(Krysztal[] krysztaly)
  194.     {
  195.         for (int i = 0; i < krysztaly.length; i++)
  196.         {
  197.             System.out.println(krysztaly[i].x[0] + " " + krysztaly[i].x[1] + " " + krysztaly[i].x[2]);
  198.         }
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement