愉悦的矩阵
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
一天,bLue 得到了一个 n*n 的矩阵,矩阵上每个位置 (i, j) 都有一定的愉悦值。
bLue 只能选择不在对角线(包括主对角线和副对角线)上的一个位置来获得愉悦值,他想知道他能获得的最大愉悦值是多少?
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据:
- 第 1 行输入一个整数 n (3 <= n <= 100),表示矩阵的行数和列数。
- 接下来 n 行,每行包含 n 个用空格隔开的整数 Aij (0 <= Aij <= 10^5),表示 (i, j) 位置上所能提供的愉悦值。
Output
对于每组数据,在一行内输出一个整数,表示 bLue 能获得的最大愉悦值。
Example Input
3 3 2 1 1 5 2 1 2 1
Example Output
2
Hint
Author
「2016级ACM集训队第二次选拔赛」bLue
解法一:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int max(int a, int b)
{
return a>b ? a : b;
}//使用了一个求最大值的函数
int main()
{
int a[100+5][105],i,n,j;
while(~scanf("%d",&n))
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
}
}
int ans = 0;
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=n; ++j)
{
if(i==j || i+j==n+1) continue; // 若是对角线元素则直接跳过,不执行之后的语句,执行下一次循环
ans = max(ans, a[i][j]); //函数调用,简洁明了
}
}
printf("%d\n", ans);
}
return 0;
}
//找规律,利用i和j两个变量表示规律
#include <stdio.h>
#include <string.h>
int max(int a, int b)
{
return a>b ? a : b;
}//使用了一个求最大值的函数
int main()
{
int a[100+5][105],i,n,j;
while(~scanf("%d",&n))
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
}
}
int ans = 0;
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=n; ++j)
{
if(i==j || i+j==n+1) continue; // 若是对角线元素则直接跳过,不执行之后的语句,执行下一次循环
ans = max(ans, a[i][j]); //函数调用,简洁明了
}
}
printf("%d\n", ans);
}
return 0;
}
//找规律,利用i和j两个变量表示规律
解法二:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int a[100+5][105],i,n,j;
while(~scanf("%d",&n))
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
}
}
int max=a[1][2];
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(i!=j&&i+j!=n+1)
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
}
printf("%d\n",max);
}
return 0;
}
///遇到数组的情况,应该把相应的值列出来,然后研究他们的共同点
#include <stdio.h>
#include <string.h>
int main()
{
int a[100+5][105],i,n,j;
while(~scanf("%d",&n))
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
}
}
int max=a[1][2];
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(i!=j&&i+j!=n+1)
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
}
printf("%d\n",max);
}
return 0;
}
///遇到数组的情况,应该把相应的值列出来,然后研究他们的共同点