首页 > 解决方案 > 随机生成的数组中的数字总和

问题描述

我知道这可能代表一个愚蠢的问题,但我有很多问题。
我将首先解释它应该如何工作:
1) 生成大小在 <4,7> 范围内的随机数组
2) 用 <100, 999> 范围内的随机元素填充它
3) 打印具有最大数字总和的三个数字的索引
所以问题是——如何?我知道我应该实现这个:

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

但我不知道在哪里。我试图将其添加为if (i>0)循环内的for循环,但它不起作用。
最后我将如何打印正确的元素?我应该使用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));
    }
}

标签: javamath

解决方案


tab如果我们的目标是仅使用数组的解决方案,我将使用二维数组来保存数字的总和以及数组中相应数字的索引

所以首先根据原始数组的大小创建数组

int[][] sums = new int[size][2];

然后在for循环中,计算随机数之和并存储它和索引

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]]);
}

推荐阅读