NEFU OJ 寒假培训第一天

这篇博客记录了作者在NEFU OJ寒假培训的第一天经历,详细介绍了四道涉及二维矩阵的编程题目,包括题目描述、输入输出示例及解题思路。作者鼓励大家面对困难要坚持,保持积极态度。
摘要由CSDN通过智能技术生成

                  菜鸟寒假培训悲惨经历

                                 第一天

这是我第一次以博客的形式记录我的学习经历,这次培训的开始,还要追溯到那个愉快的上午… …
(然后就进入了题目)
                     👉二维矩阵对角线和

Description

     计算m×m的方阵的对角线所有元素的和。

Input

输入数据有多组,每组第1行为m( 2<=m<=10),接下来有m行m列的数据1<=a(i,j)<=100;

Output

  对于你刚输入的这个矩阵,输出方阵的对角线所有元素的和。
  (交叉位置元素要多次计算的)

Sample Input

  3 
  1 2 3
  4 5 6
  7 8 9

Sample Output

 30

Hint

交叉位置元素要多次计算的

通过读题,嗯,这是一道二维数组题,那么,设二维数组就完了:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,i,j,x,y,n;
    int a[100][100];
    while(scanf("%d",&m)!=-1)
    {
        for(i=1; i<=m; i++)
        {
            for(j=1; j<=m; j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        x=0;
        y=0;
        for(n=1; n<=m; n++)
        {
            x=x+a[n][n];
        }
        for(n=1; n<=m; n++)
        {
            y=y+a[n][m-n+1];
        }
        printf("%d\n",x+y);
    }
    return 0;

}

                     👉矩阵的外围
Description

  在军事训练中,战士们站成一个方阵(也可能是一个长方形),每个战士身上都有1个
  编号,现在军队领导想知道,站在队伍外围战士们的编号之和是多少?聪明的你能帮
  帮他吗?

Input

输入数据有多组,每组第一行n和m(1<n,m<=10),代表行数和列数。接下来是n行m列个
战士的编号值value[i],0<= value[i] <=100;

Output

在一行内输出外围战士的编号之和。

Sample Input

3 3
1 2 3
4 5 6
0 1 0

Sample Output

17

这道题,设二维数组就完了:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,m,i,j;
   int a[100][100],x;
   while(scanf("%d%d",&n,&m)!=-1)
   {
       for(i=1;i<=n;i++)
       {
           for(j=1;j<=m;j++)
           {
               scanf("%d",&a[i][j]);
           }
       }
       x=0;
 for(i=1;i<=n;i++)
 {
     for(j=1;j<=m;j++)
     {
         if(i==n||j==m||i==1||j==1)
       {
           x=x+a[i][j];
       }
     }
 }

       printf("%d\n",x);
   }
   return 0;

}

                       👉五人帮
Description

5人帮的含义就是数字和该数字所对应的上、下、左、右和自己本身的数值之和,请求出矩阵中5人帮的
最大值是多少?

Input

输入数据只有多组,每组第1行为2个数m和n(1 <m,n<10),代表行数和列数; 接下来输入这m行和n列
个数data(i,j)(1< data(i,j)<100)

Output

输出该矩阵5人帮的最大值!

Sample Input

3 4
1 2 3 4
3 4 5 6
2 3 3 9

Sample Output

24

这个题有一个奇怪的地方,就是这个矩阵之外的数字,这道题默认为0了,因此在矩阵外层的书也是可以作为五人帮的中心的,因此这道题的解法有:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m,n,max,sum;
    int i,j;
    int a[100][100];
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        maxx=0;
        for(i=1; i<=m; i++)
        {
            for(j=1; j<=n; j++)
                scanf("%d",&a[i][j]);
        }
        for(i=1; i<=m; i++)
        {
            for(j=1; j<=n; j++)
            {
                sum=a[i][j]+a[i][j-1]+a[i][j+1]+a[i-1][j]+a[i+1][j];
                if(sum>max)
                    max=sum;
            }
        }
        printf("%d\n",max);


    }
    return 0;


}

                      👉回转小矩阵
Description

现在有一个n*m行的矩阵A 逆时针旋转90度形成一个新的矩阵B,将B矩阵输出来。

Input

多组样例,每行两个整数n,m( 1<=n<=100, 1<=m<=100 )

Output

 输出矩阵B

Sample Input

3 5
1 2 3 4 5
2 4 9 2 1
3 4 5 7 9

Sample Output

5 1 9
4 2 7
3 9 5
2 4 4
1 2 3 

这个题可以从后往前输出,因此:

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n,m,a[10][10],tmp,max=0;
	while(scanf("%d %d",&m,&n)!=-1)
	{
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++)
			{
				cin>>a[i][j];
			}
		}
		for(int i=n-1;i>=0;i--)
		{
			for(int j=0;j<m;j++)
			{
				printf("%d",a[j][i]);
				if(j!=m-1)
                cout<<" ";
			}
			cout<<endl;
		}
	}
	return 0;
}

                     👉矩阵相乘
Description

计算2个方阵的乘积!

Input

输入数据有多组,每组第1行为m (1 <m<10),表示方阵的大小,接下来为2个m行m列
的数据data(i,j);( 1<data(i,j)<100)

Output

输出这2个方阵的乘积,具体见样例

Sample Input

 2
 1 2
 1 2
 3 1
 1 3

Sample Output

5 7
5 7

这个题,干就完事儿了:

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int m,a[10][10],b[10][10],c[10][10],tmp,sum;
	while(scanf("%d",&m)!=-1)
	{
		sum=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++)
			{
				cin>>b[i][j];
			}
		}
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				c[i][j]=0;
				for(int k=0;k<m;k++)
				{
					c[i][j]+=a[i][k]*b[k][j];
				}
			}
		}
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				cout<<c[i][j];
				if(j!=m-1)cout<<" ";
			}
			cout<<endl;
		}
	}
	return 0;
}

       所以,我们遇到什么困难,也不要怕,微笑着面对它,消除恐惧的最好办法就是面对恐惧,坚持,才是胜利,加油,奥给!

              此时,下集还在赶来的路上… …

              (鄙人第一次尝试,若有不足之处还望指正,不喜勿喷💔)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值