Сумма цифр в случайно сгенерированных массивах - PullRequest
0 голосов
/ 19 марта 2020

Я знаю, что это может означать глупый вопрос, но у меня много проблем с этим.
Сначала я объясню, как это должно работать:
1) Генерация случайного массива с размером в диапазоне <4, 7>
2) Заполните его случайными элементами в диапазоне <100, 999>
3) Напечатайте индекс из трех чисел с наибольшим значением di git sum
Итак, вопрос в том, как? Я знаю, что должен реализовать это:

             SumOfDigits += ElementFromArray % 10;
              ElementFromArray /= 10;

Но я понятия не имею, где. Я попытался добавить это как if (i>0) l oop внутри for l oop, но это не работает.
Кроме того, как в конце я собираюсь напечатать нужные элементы? Должен ли я использовать Arrays.sort(tab), а затем System.out.println(tab[tab.length - 1]) (и так далее с -2, -3 для 3 последних элементов)?

import java.util.Arrays;
import java.util.Random;

public class Ex1 {

    public static void main(String[] args) {
        Random rand = new Random();
        int size = rand.nextInt(4) + 4;

        int tab[] = new int[size];

        for (int i = 0; i < tab.length; i++) {
            int elements = rand.nextInt(900) + 100;
            tab[i] = elements;

        }
        System.out.println(Arrays.toString(tab));
    }
}

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Если мы стремимся к решению, использующему только массивы, я бы использовал двумерный массив для хранения суммы цифр и индекса соответствующего числа в массиве 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]]);
}
0 голосов
/ 19 марта 2020

Просто используйте, пока l oop: вот быстрое и грязное решение:

private static void main10(String[] args) {
    Random rand = new Random();
    int size = rand.nextInt(4) + 4;

    int[] tab = new int[size];

    for (int i = 0; i < tab.length; i++) {
        int element = rand.nextInt(900) + 100;
        tab[i] = element;

    }
    System.out.println(Arrays.toString(tab));
    // calculate digits:
    int[] digitsums = new int[size];
    for (int i = 0; i < tab.length; i++) {
        int element = tab[i];
        int sumOfDigits = 0;
        while (element > 0) {
            sumOfDigits += element % 10;
            element /= 10;
        }
        digitsums[i] = sumOfDigits;
    }
    System.out.println(Arrays.toString(digitsums));
    int[] copyOfdigitsums = Arrays.copyOf(digitsums, digitsums.length);
    for (int i = 1; i <= 3; i++) {
        int j = getIndexOfLargest(copyOfdigitsums);
        System.out.println("index of " + i + "largest is " + j + ", with a digitsum of " + copyOfdigitsums[j]);
        copyOfdigitsums[j] = 0;
    }
}

static int getIndexOfLargest(int[] digitsums) {
    int largest = 0;
    int index = 0;
    for (int i = 0; i < digitsums.length; i++) {
        int d = digitsums[i];
        if (largest < d) {
            largest = d;
            index = i;
        }
    }
    return index;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...