如何获得输出和数组/矩阵中列的总和?

bweufnob  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(335)

大家好,这里的代码天才们,我会尽可能简单地解释我的问题
图像1

要生成image1,假设需要一个如下所示的数组,请记住数字从左到右放置在第一行中,然后在第二行中向后放置,如果您添加了更多的数字,它将创建第三行。

int[] something = {1, 2, 3, 2, 1, 2, 1, 3, 3, 1, 1, 2}

所以我想做一个布局的“Map”,就像下面这个期望的输出。

2 1 1 3 3 1

1 2 3 2 1 2

然后我想从这里找到每列的总数,就像这样。

2 1 1 3 3 1

1 2 3 2 1 2

..................

3 3 4 5 4 3

(然后我想在另一个数组中存储此布局和总和)
希望这一切都是有意义的,如果是的话,我该怎么做呢?
感谢堆:)

zdwk9cvp

zdwk9cvp1#

import java.util.Scanner;
public class Stckoverq {
public static void main(String args[]) {
    Scanner sn = new Scanner(System.in);
    System.out.print("What is the size of array? ");
    int size = sn.nextInt();
    System.out.print("What is length of the row?");
    int len = sn.nextInt();
    int ind = 0, i = 0, j = 0;
    //variable 'ind' is for getting the element from arr[] array at index ind
    int rac[][] = new int[size/len][len];
    //variable 'i' and 'j' is for storing rows and column elements respectively in array rac[]
    int arr[] = new int[size];
    System.out.println("Enter array elements: ");
    for(int k=0;k<size;k++)
        arr[k] = sn.nextInt();
    while(ind!=arr.length)
    {
        if(j==len) {
            j=0;    //Reset column index
            i++;    //Increase row index
        }
        rac[i][j] = arr[ind];
        ind++;
        j++;    //Increase column index
    }
    //Now print the rows and columns................
    for(int r =0;r<size/len;r++) {
        for(int c=0;c<len;c++)
            System.out.print(rac[r][c]+"\t");
        System.out.println();
        }
    int sum[] = new int[len];
    //this array sum[] is used to store sum of all row elements.
    int s = 0;
    for(int c=0;c<len;c++) {
        for(int r =0;r<size/len;r++)
            s += rac[r][c];
        sum[c] = s;
        s = 0;
        }
    for(int x: sum)
        System.out.print(x+"\t");
}
}
juud5qan

juud5qan2#

似乎可以使用二维数组数据结构来解决此问题:

int[][] something = new int[][]{
    {2, 1, 1, 3, 3, 1},
    {1, 2, 3, 2, 1, 2}
};

int totalForColomn1 = something[0][0] + something [1][0];
int totalForColomn2 = something[0][1] + something [1][1];
// ...
int totoalForColomn6 = something[0][5] + something [1][5];

如果只能使用一维数组:

int[] something = new int[] {2, 1, 1, 3, 3, 1, 4, 2, 3, 2, 1, 2};
int row_size = 6;

int totalForColomn1 = something[0] + something[0 + row_size];
int totalForColomn2 = something[1] + something[1 + row_size];
// ...
int totalForColomn6 = something[5] + something[5 + row_size];

记住保持一致 row_size 将那些未决定的元素设置为0。
在这种情况下,应该初始化数组,如下所示:

int[] something = new int[] {0, 0, 0, 0, 1, 4, 1, 2, 3, 2, 1, 1};
zzoitvuj

zzoitvuj3#

如果我读对了,如果l是数组的长度,你想把数组的第n个和第l-1-n个元素相加,然后把结果存储在一个数组中。我很快就看完了,所以我没有处理输入数组长度奇数时会发生什么情况(您的问题没有具体说明)。

import java.util.Arrays;

public class App {

    public static void main(String[] args) {
        int[] something = {1, 2, 3, 2, 1, 2, 1, 3, 3, 1, 1, 2};
        System.out.println(Arrays.toString(addValues(something)));

    }
    public static int [] addValues(int [] input){
        int[] output = new int[input.length / 2];
        for(int i = 0; i<input.length/2; i++){
            output[i] = input[i] + input[input.length -1 - i ];
        }
        return output;
    }
}

编辑:我认为这适用于任意行数的情况。这项工作的主要内容在下面的网格中。

0  1  2  3  4  5 :row 0
11 10 9  8  7  6 :row 1
12 13 14 15 16 17:row 2
23 22 21 20 19 18:row 3

因此,输出索引是向上还是向下是由行号决定的,每次我们碰到与输出数组大小相同的输入索引时,我们都需要保持在相同的输出索引。

import java.util.Arrays;

public class App {

    public static void main(String[] args) {
        int[] something = { 1, 2, 3, 2, 1, 2, 1, 3, 3, 1, 1, 2 };
        System.out.println(Arrays.toString(addValues(something, 6)));

    }

    public static int[] addValues(int[] input, int row_lenth) {
        int[] output = new int[row_lenth];
        int output_index = 0;
        for (int i = 0; i < input.length; i++) {
            if (i % row_lenth != 0) {
                if ((i / row_lenth) % 2 == 0) {
                    output_index++;
                } else {
                    output_index--;
                }
            }
            output[output_index] += input[i];
        }
        return output;
    }
}

相关问题