Advertisement
dargenn

ASD3

Nov 4th, 2015
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.88 KB | None | 0 0
  1. import java.io.FileNotFoundException;
  2. import java.io.FileReader;
  3. import java.io.PrintWriter;
  4. import java.util.*;
  5.  
  6. public class Main {
  7.     public static void main(String[] args) throws FileNotFoundException {
  8.         int n = 0;
  9.         int k = 0;
  10.         Scanner fileIn = new Scanner (new FileReader("PKO_in_2_Dargiewicz.txt"));
  11.         PrintWriter fileOut = new PrintWriter("PKO_out_2_Dargiewicz.txt");
  12.         ArrayList<Integer> values2 = new ArrayList<>();
  13.         ArrayList<Integer> numberOfCoins2 = new ArrayList<>();
  14.  
  15.         while(fileIn.hasNext()){
  16.             n = fileIn.nextInt();
  17.  
  18.             for (int i = 0; i < n; i++) {
  19.                 values2.add(i, fileIn.nextInt());
  20.             }
  21.  
  22.             for (int i = 0; i < n; i++) {
  23.                 numberOfCoins2.add(i, fileIn.nextInt());
  24.             }
  25.  
  26.             k = fileIn.nextInt();
  27.         }
  28.  
  29.         int[] values = new int[n];
  30.         int[] numberOfCoins = new int[n];
  31.         for(int i = 0; i < n; i++){
  32.             values[i] = values2.get(i);
  33.             numberOfCoins[i] = numberOfCoins2.get(i);
  34.         }
  35.  
  36.         List<Integer[]> results = solutions(values, numberOfCoins, new int[n], k, 0);
  37.         Integer minimalNumber = GetMinimalNumber(results);
  38.         fileOut.println(minimalNumber);
  39.  
  40.         for (Integer[] result : results){
  41.             System.out.println(Arrays.toString(result));
  42.         }
  43.  
  44.         for(Integer[] currentArray : results){
  45.             Integer sum = 0;
  46.  
  47.             for (Integer aCurrentArray : currentArray)
  48.                 if (aCurrentArray != 0)
  49.                     sum += aCurrentArray;
  50.  
  51.             if(sum == minimalNumber) {
  52.                 for (Integer aCurrentArray : currentArray)
  53.                     fileOut.print(aCurrentArray + " ");
  54.                 fileOut.println();
  55.             }
  56.  
  57.         }
  58.  
  59.         fileIn.close();
  60.         fileOut.close();
  61.     }
  62.  
  63.     public static Integer GetMinimalNumber(List<Integer[]> results) {
  64.         Integer[] numbers = new Integer[results.size()];
  65.         Integer counter = 0;
  66.         for(Integer[] currentArray : results){
  67.             Integer sum = 0;
  68.  
  69.             for (Integer aCurrentArray : currentArray)
  70.                 if (aCurrentArray != 0)
  71.                     sum += aCurrentArray;
  72.  
  73.             numbers[counter] = sum;
  74.             counter++;
  75.         }
  76.  
  77.         for(Integer I : numbers)
  78.             System.out.println(I);
  79.  
  80.         Integer minimalNumber = numbers[0];
  81.  
  82.         for(Integer I : numbers)
  83.             if(I < minimalNumber)
  84.                 minimalNumber = I;
  85.  
  86.         return minimalNumber;
  87.     }
  88.  
  89.     public static List<Integer[]> solutions(int[] values, int[] ammounts, int[] variation, int price, int position){
  90.         List<Integer[]> resultList = new ArrayList<>();
  91.         int value = compute(values, variation);
  92.  
  93.         if (value < price){
  94.             for (int i = position; i < values.length; i++) {
  95.                 if (ammounts[i] > variation[i]){
  96.                     int[] newvariation = variation.clone();
  97.                     newvariation[i]++;
  98.                     List<Integer[]> newList = solutions(values, ammounts, newvariation, price, i);
  99.  
  100.                     if (newList != null){
  101.                         resultList.addAll(newList);
  102.                     }
  103.                 }
  104.             }
  105.         } else if (value == price) {
  106.             resultList.add(copyArray(variation));
  107.         }
  108.         return resultList;
  109.     }
  110.  
  111.     public static int compute(int[] values, int[] variation){
  112.         int value = 0;
  113.  
  114.         for (int i = 0; i < variation.length; i++) {
  115.             value += values[i] * variation[i];
  116.         }
  117.  
  118.         return value;
  119.     }
  120.  
  121.     public static Integer[] copyArray(int[] array){
  122.         Integer[] copy = new Integer[array.length];
  123.  
  124.         for (int i = 0; i < array.length; i++) {
  125.             copy[i] = array[i];
  126.         }
  127.  
  128.         return copy;
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement