有一个N*M的矩阵,要求编程求出其中值最大的那个元素,以及其所在的行号和列号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有一个N*M的矩阵,要求编程求出其中值最大的那个元素,以及其所在的行号和列号相关的知识,希望对你有一定的参考价值。

参考技术A #include<stdio.h>
int main()

int a[100][100];
int i,j,n,m,max,maxi,maxj;
printf("请输入N,M\n");
scanf("%d%d",&n,&m);
printf("请输入矩阵:\n");
for(i=0;i<n;i++)

for(j=0;j<m;j++)
scanf("%d",&a[i][j]);

max=a[0][0];
for(i=0;i<n;i++)

for(j=0;j<m;j++)

if(max<a[i][j])

max=a[i][j];
maxi=i;
maxj=j;



printf("max=%d ",a[maxi][maxj]);
printf("行号=%d,列号=%d\n",maxi+1,maxj+1);
return 0;

VC++6.0本回答被提问者和网友采纳

最大上升子矩阵

最大上升子矩阵(matrix)
背景:
所谓最长上升子矩阵,就是这个矩阵中的任一元素的值都大于它左边、上边的元素的值。如以下子矩阵是一个上升子矩阵:
1 2 3 4
2 3 4 5
4 5 7 9
在给定的一个 n*m 的矩阵(LJJ 的班级)中,最大的一个上升子矩阵,于是他找到你来帮忙,要求求出它的面积。
输入格式:
第一行:两个正整数 n,m,分别表示行数和列数。
第二行到第 n+1 行,每行 m 个整数(可能是负)
输出格式:
第一行:最大上升子矩阵的面积


输入样例:
5 5
3 1 2 5 7
1 2 3 4 6
2 4 5 6 9
1 5 7 9 7
3 6 8 10 1


输出样例:
12


数据说明:样例中最大的上升子矩阵是:
2 3 4
4 5 6
5 7 9
6 8 10
面积是 12
数据范围:
对于 50%的数据,1<n,m<=100
对于 100%的数据,1<n,m<=1000-10000<a[i][j]<10000,大多数数据
随机生成,有少量极端数据。

洛谷水题,dp O(n^4)+剪枝即可

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int n,m,a[1001][1001],left[1001][1001],up[1001][1001],ans,maxx;
 5 
 6 int main()
 7 {
 8     freopen("matrix.in","r",stdin);
 9     freopen("matrix.out","w",stdout);
10     scanf("%d%d",&n,&m);
11     for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) scanf("%d",&a[i][j]);
12     for (int i=1; i<=n; i++)
13         for (int j=1;j<=m;j++)
14         {
15             for (int k=i-1;k>=1;k--) 
16                 if (a[k][j]<a[k+1][j]) up[i][j]++; 
17                 else break;
18             for (int k=j-1;k>=1;k--) 
19                 if (a[i][k]<a[i][k+1]) left[i][j]++; 
20                 else break;
21         }
22     maxx=0;
23     for (int i=1; i<=n; i++)
24         for (int j=1; j<=m; j++)
25         {
26             for (int k=up[i][j]+1; k>=1; k--)
27             {
28                 if (k*(left[i][j]+1)<maxx) break;
29                 int l;
30                 ans=left[i][j]+1;
31                 for (l=i; l>=i-k+1; l--) 
32                     if (ans>left[l][j]+1) ans=left[l][j]+1;
33                 if (k*ans<maxx) continue;
34                 for (l=j; l>=j-ans+1; l--)
35                     if (up[i][l]+1<k) break;
36                 if (j-l<ans) ans=j-l;
37                 ans=ans*k;
38                 if (ans>maxx) maxx=ans;
39             }
40         }
41     printf("%d",maxx);
42     return 0;                    
43 } 

 

以上是关于有一个N*M的矩阵,要求编程求出其中值最大的那个元素,以及其所在的行号和列号的主要内容,如果未能解决你的问题,请参考以下文章

有一个n*n的矩阵,要求编一程序求出其中每行元素的最大值并将其存放在一个一维数组当中。用c语言编程

c语言:3*4的矩阵,编程序求出其中最大的那个元素的值,以及其所在的行号和列号。(打擂台算法)

有一个3X4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号

c语言:输入是一个n*m的矩阵,要求找到其中最大的全0字矩阵。怎么算?

[Offer收割]编程练习赛13 B.最大子矩阵[枚举]

1191.矩阵最大值