牛客网---2016---搜狗矩阵元素相乘

来源:互联网 发布:江恩正方软件 编辑:程序博客网 时间:2024/05/21 11:51

恩,该减肥了,啧啧,很难受,坚持不住,啧啧。对了,上周六的烤鱼很棒,很好吃,啧啧。

这里写图片描述

题目:
A[n,m]是一个n行m列的矩阵,a[i,j]表示A的第i行j列的元素,定义x[i,j]为A的第i行和第j列除了a[i,j]之外所有元素(共n+m-2个)的乘积,即x[i,j]=a[i,1]a[i,2]a[i,j-1]…*a[i,m]*a[1,j]*a[2,j]…*a[i-1,j]*a[i+1,j]…*a[n,j],现输入非负整形的矩阵A[n,m],求MAX(x[i,j]),即所有的x[i,j]中的最大值。
输入:
第一行两个整数n和m。之后n行输入矩阵,均为非负整数。

3 55 1 8 5 21 3 10 3 37 8 5 5 16

输出:
一行输出答案。

358400

解析:
1. 如果按照我最开始的大脑考虑这个问题的话,那么就是最基本的两个for循环遍历所有数据,然后嵌套两个for循环计算所有结果,啧啧,4个for循环的嵌套很可怕的。
2. 那么就可以考虑别的方法,实质上,首先创建一个结果数组,然后读取一个数据,对应乘在相应的位置上就能极大地减少复杂度。
解题所需函数:
1 . Arrays.fill函数
fill() 方法中没有 fill( float, float) 的方法,只有fill( float[], float) 方法。
另外呢,他是整个数组用同一个数值来填充,打个比方

// 用同一个数值来填充,而不是全部都是随机数Float[] weight = new float[10];java.util.Arrays.fill( weight, (float)(100*Math.random() + 60));

2 . 最大值最小值,之前也说过

int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;

代码:

import java.util.Arrays;import java.util.Scanner;public class Main {    public static void main(String[] args){        // 创建Scanner        Scanner scan = new Scanner(System.in);        // 常规操作        while(scan.hasNext()){            // 首先获取矩阵的行数和列数            int n = scan.nextInt();            int m = scan.nextInt();            // 创建数组并填充数据            int[][] help = new int[n][m];            for(int i=0;i<n;i++)                Arrays.fill(help[i], 1);            // 双循环遍历记录数组,并乘在对应项            for(int i =0;i<n;i++){                for(int j=0;j<m;j++){                    int value = scan.nextInt();                    int tmp;                    for(tmp=0;tmp<i;tmp++)                        help[tmp][j]*=value;                    for(tmp=i+1;tmp<n;tmp++)                        help[tmp][j]*=value;                    for(tmp=0;tmp<j;tmp++)                        help[i][tmp]*=value;                    for(tmp=j+1;tmp<m;tmp++)                        help[i][tmp]*=value;                }            }            // 双循环遍历 获得最大值            int max = Integer.MIN_VALUE;            for(int i=0;i<n;i++){                for(int j=0;j<m;j++){                    if(help[i][j]>max)                        max = help[i][j];                }            }            System.out.println(max);        }        scan.close();    }}
原创粉丝点击