2020大一寒假ACM培训②(二维数组篇)

其实这应该是集训第一天的内容,不过我鸽了,鸽鸽更健康。

先从c++的语法说起吧。

一、头文件和输入输出

1.万能头文件 放在第一行

#include<bits/stdc++.h>

2.输入方式

cin >>

3.输出方式

cout << “Hello World!;

4.换行

<< endl

更多c++输入输出流以及相关语法知识请参见
C++输入输出流(c语言中文网)

二、二维数组
定义:

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。

格式:

类型说明符 数组名[常量表达式1][常量表达式2];

要求:

定义时,可以省略第一维的大小,但第二维的大小不可省略。
二维数组其实是按一维方式存储的。
二维数组行优先。
在这里插入图片描述
二维数组相关知识参见
C语言二维数组的定义、初始化、赋值(c语言中文网)

NEFU OJ 951 二维矩阵最大值

#include <iostream>

using namespace std;

int main()
{
    int a[10][10],maxi,maxj,n,m,maxx;
    while(cin >>n>>m)
        {
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        cin >> a[i][j];
        maxx=a[0][0];
        maxi=0;maxj=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            if(a[i][j]>maxx)
            {maxx=a[i][j];
            maxi=i;
            maxj=j;}
        }
     cout<<maxi+1<<" "<<maxj+1<<" "<<maxx;
     cout<<endl;

    }
    return 0;
}

NEFU OJ 953 矩阵相加

#include <iostream>

using namespace std;

int main()
{
    int a[10][10],b[10][10],c[10][10];
    int n,m;
    while(cin >>n>>m)
        {
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        cin >> a[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        cin >> b[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        c[i][j]=a[i][j]+b[i][j];
    for(int i=0;i<n;i++)
        {
        for(int j=0;j<m;j++)
           {cout<<c[i][j];
           (j==m-1)?cout<<endl:cout<<" ";}
         }
    }
    return 0;
}

NEFU OJ 952 二维矩阵对角线和

#include <iostream>

using namespace std;

int main()
{
    int a[10][10];
    int m,s;
    while(cin >>m)
        {
            s=0;
    for(int i=0;i<m;i++)
        for(int j=0;j<m;j++)
        cin >> a[i][j];
    for(int i=0;i<m;i++)
        for(int j=0;j<m;j++)
        {if(i==j)
        s=a[i][j]+s;
        if(i+j==m-1)
        s=a[i][j]+s;}
      cout<<s<<endl;
    }
    return 0;
}

NEFU OJ 1064 矩阵的外围

#include <iostream>

using namespace std;

int main()
{
    int a[10][10];
    int m,s,n;
    while(cin >>n>>m)
        {
            s=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin >> a[i][j];
    for(int j=1;j<=m;j++)
        s=s+a[1][j]+a[n][j];
    for(int i=2;i<m;i++)
        for(int j=1;j<=m;j++)
        if(j==1||j==m)
            s=s+a[i][j];
      cout<<s<<endl;
    }
    return 0;
}

NEFU OJ 955 五人帮

思想:分类分类再分类。

#include <iostream>

using namespace std;

int main()
{
    int a[10][10],b[10][10];
    int m,s,n;
    while(cin >>n>>m)
        {
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin >> a[i][j];
    b[1][1]=a[1][1]+a[1][2]+a[2][1];
    b[n][m]=a[n][m]+a[n-1][m]+a[n][m-1];
    b[1][m]=a[1][m]+a[1][m-1]+a[2][m];
    b[n][1]=a[n][1]+a[n-1][1]+a[n][2];
    for(int j=2;j<m;j++)
        b[1][j]=a[1][j]+a[1][j-1]+a[1][j+1]+a[2][j];
    for(int j=2;j<m;j++)
        b[n][j]=a[n][j]+a[n][j-1]+a[n][j+1]+a[n-1][j];
    for(int i=2;i<n;i++)
        b[i][1]=a[i-1][1]+a[i+1][1]+a[i][2]+a[i][1];
    for(int i=2;i<n;i++)
        b[i][m]=a[i-1][m]+a[i+1][m]+a[i][m-1]+a[i][m];
    for(int i=2;i<n;i++)
        for(int j=2;j<m;j++)
        b[i][j]=a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1];
    s=b[1][1];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(b[i][j]>s)
                s=b[i][j];
        cout << s <<endl;
    }
    return 0;
}

这么写,想必你已经看吐了,简单版参见大佬写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值