Witam.
Mam do zrobienia zadanie o treści:
Na wejściu danych jest n ( 1≤ n≤ 100) różnych liczb N+z przedziału [1,k] ( 1≤k≤150). Zaimplementuj algorytm(o możliwie najniższym koszcie czasowym), który wykorzystując zadane liczby, generuje zbiory 2-elementowe {x,0cm">y} spełniające własność x+y<=k.
Każdą liczbę należy użyć dokładnie jeden raz. W przypadku, gdy dla zadanej 0cm">wartości x nie można już znaleźć takiej liczby y, by spełniona była powyższą własność, należy utworzyć zbiór 1-elementowy {x}. Zadanie polega na znalezieniu możliwie najmniejszej ilości tego typu zbiorów.
Utworzyłem plik .txt oraz na wejście podałem n=8 oraz k=140 a liczby do posortowania to 60 70 80 56 67 78 81 68.Niżej umieściłem to co udało mi się stworzyć dane w .txt podałem w 1 linii więc na pewno zostały wszystkie zaczytane do strumienia lecz niestety nie działa podczas kompilacji wyrzuca mi:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 60
at zad2.sort.main(sort.java:33)
i nie wiem już co mam zrobić w tym momencie.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class sort {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
String pomoc[] = null;
File file = new File("1.txt");
Scanner in = new Scanner(file);
String dane = in.nextLine();
pomoc = dane.split(" ");
in.close();
int j=2;
int n = Integer.parseInt(pomoc[0]);
//int o = Integer.parseInt(pomoc[1]);
int[] T = new int[n];
int[] Tp = new int[n];
int c,k;
for(int i=0;i<n;i++)
{
T[i]=Integer.parseInt(pomoc[j]);
j++;
}
for(int i=0;i<n;i++)
Tp[i]=0;
for(int i=0;i<n;i++)
Tp[T[i]]++;
c=1;
for(int i=0;i<n;i++){
if (Tp[i]>0)
for(k=1;k<Tp[i]+1;k++)
T[c]=i;
c++;
}
}
}
dodanie znacznika <code class="java"> - fp