Если мы стремимся к решению, использующему только массивы, я бы использовал двумерный массив для хранения суммы цифр и индекса соответствующего числа в массиве tab
Поэтому сначала создайте массив на основе размер исходного массива
int[][] sums = new int[size][2];
, затем в for l oop вычислите сумму случайного числа и сохраните ее и индекс
sums[i][0] = elements / 100 + (elements / 10) % 10 + elements % 10;
sums[i][1] = i;
Затем сортируйте sums
массив с использованием пользовательского компаратора
Arrays.sort(sums, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o2[0], o1[0]);
}
});
И, наконец, выводим индекс и номер числа из верхних 3
for (int i = 0; i < 3; i++) {
System.out.printf("%d: %d\n", sums[i][1], tab[sums[i][1]]);
}