愉悦的矩阵

来源:互联网 发布:数据库如何备份 编辑:程序博客网 时间:2024/05/01 23:42

愉悦的矩阵

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

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

33 2 11 5 21 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 <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;
}
///遇到数组的情况,应该把相应的值列出来,然后研究他们的共同点
0 0
原创粉丝点击