`鉴于NxM 2D阵列,您需要找出所有行和列中哪一行或一列总体上具有最大的总和(其元素之和)。
输入格式: 第1行:分别为2个整数N和M,以空格分隔
第2行:单行包含N * M个元素,这些元素以行方式输入,每个元素之间用空格隔开。
输出格式: 如果行总和最大,则-“行” row_num max_sum 如果列总和最大,则-“ column” col_num max_sum
注意: 如果行/列的总数超过一个,则请考虑 行/列在前。如果第i行和第j列的总和相同( 最大),将第i行作为答案。
我的下面的代码
public static void findLargest(int input[][]){
int m=input.length;
int n=input[0].length;
int max = Integer.MIN_VALUE;
int q = 0;
int sum=0;
String s = "";
// int a[]=new int [m+n];
//for row sum
for(int i=0; i<n; i++)
{
sum=0;
for(int j=0; j<m; j++)
{
sum =sum +input[i][j];
}
if(sum>max){
max = sum;
q = i;
s = "row";
}
}
// for col
for(int i=0; i<m; i++)
{
sum=0;
for(int j=0; j<n; j++)
{
sum=sum+input[j][i];
}
if(sum>max){
max = sum;
q = i;
s = "column";
}
}
System.out.println(s + " " + q + " " + max);
}
答案 0 :(得分:0)
您几乎已找到解决方案,唯一的问题是,在分别计算每一行和每一列的总和之前,您没有重置 sum1 和 sum2 。在每种情况下,您都应该在第二个循环之前执行此操作。
答案 1 :(得分:0)
假设您将数组数据作为字符串,其中元素之间用空格分隔,并且将维数N,M保存为整数,则以下代码应该可以解决您的问题。
private int findMax(String s, int N, int M) {
return findMaxSum(s.split(" "), N, M);
}
private int findMaxSum(String[] data, int N, int M) {
int max = 0;
for (int i = 0; i < M; i++) {
max = Math.max(columnSum(data, i, N, M), max);
max = Math.max(rowSum(data, i, N, M), max);
}
return max;
}
private int columnSum(String[] data, int columnIndex, int N, int M) {
int sum = 0;
for (int i = 0; i < M; i++) {
sum += Integer.parseInt(data[i * N + columnIndex]);
}
return sum;
}
private int rowSum(String[] data, int rowIndex, int N, int M) {
int sum = 0;
System.out.println("row");
for (int i = 0; i < N; i++) {
sum += Integer.parseInt(data[rowIndex * N + i]);
System.out.println(data[rowIndex * N + i]);
}
return sum;
}
答案 2 :(得分:0)
最后,我用相同的代码进行编码,并假设N * M个Matrix元素被空格分隔,并且其输出是行和列之间的最大和,并打印相应的行或列。
enter code here
public static void findLargest(int input[][]){
int m=input.length;
int n=input[0].length;
int max = Integer.MIN_VALUE;
int q = 0;
String s = "";
for(int i=0; i<m; i++)
{
int sum=0;
for(int j=0; j<n; j++)
{
sum =sum +input[i][j];
}
if(sum>max){
max = sum;
q = i;
s = "row";
}
}
for(int i=0; i<n; i++)
{
int sum=0;
for(int j=0; j<m; j++)
{
sum=sum +input[j][i];
}
if(sum>max){
max = sum;
q = i;
s = "column";
}
}
System.out.println(s + " " + q + " " + max);
}
答案 3 :(得分:0)
This code will work for every case, rather it be a square matrix or not -->
( The code has been written in
public static void rowOrColumn(int[][] input) {
int rows = input.length;
int columns = input[0].length;
int largest = Integer.MIN_VALUE;
int x = 0;
int sum1 = 0;
int sum2 = 0;
String s = "";
for(int i=0;i<rows;i++) {
sum1 = 0;
int j = 0;
for(;j<columns;j++) {
sum1 += input[i][j];
}
if(sum1>largest) {
largest = sum1;
x = i;
s = "row";
}
}
for(int i=0;i<columns;i++) {
sum2 = 0;
int j = 0;
for(;j<rows;j++) {
sum2 += input[j][i];
}
if(sum2>largest) {
largest = sum2;
x = i;
s = "column";
}
}
System.out.println(s + " " + x + " " + largest);
}
public static int[][] takeInput(){
Scanner sc = new Scanner(System.in);
int rows = sc.nextInt();
int columns = sc.nextInt();
int[][] arr = new int[rows][columns];
for(int i=0;i<rows;i++) {
for(int j=0;j<columns;j++) {
arr[i][j] = sc.nextInt();
}
}
return arr;
}
public static void main(String[] args) {
int[][] arr = takeInput();
rowOrColumn(arr);
}