每日一练

1172:题目描述

给定一个m行n列的二维矩阵,求其四周边元素和。

1<=m、n<=100000,可能是1行100000列,也可能是10000行50列,但保证矩阵元素不多于500000。你可能不能预定义数组的大小了,你要学会使用动态内存分配哦。你可以动态申请m*n个内存单元,然后用一维数组来存储二维数组,二维数组元素a[i][j]对应一维数组a[i*n+j],i、j均从0开始。

输入

输入第一行是m和n,然后是一个m行n列的矩阵。

输出

输出一个整数,表示矩阵所有边界元素的和。

答案:

(非指针,答案没错,oj不过)

#include<stdio.h>
int main()
{
	int m,n,i,j,sum;
	scanf("%d%d",&m,&n);
	int a[m][n];
	for(i=0; i<m; i++)
		for(j=0; j<n; j++)
			scanf("%d",&a[i][j]);
	if(m==1)
	{
		for(j=0; j<n; j++)
			sum=sum+a[0][j];
		printf("%d",sum);
	}
	else
	{
		for(j=j-1;j>=0;j--)
			sum=sum+a[0][j]+a[i-1][j];
		j=m-2;
		for(i=1; i<=j; i++)
			sum=sum+a[i][0]+a[i][n-1];
		printf("%d",sum);
	}
	return 0;
}

指针版:

思路:大矩形-小矩形

二维数组元素a[i][j]对应一维数组a[i*n+j],i、j均从0开始。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int m,n,*p,i,j,sum1=0,sum2=0;
	scanf("%d%d",&m,&n);
	p=(int *)malloc(sizeof(int)*m*n);
	for(i=0; i<m; i++)
		for(j=0; j<n; j++)
			scanf("%d",&p[i*n+j]);
	for(i=0; i<m; i++)
		for(j=0; j<n; j++)
			sum1=sum1+p[i*n+j];
	for(i=1; i<m-1; i++)
		for(j=1; j<n-1; j++)
			sum2=sum2+p[i*n+j];
	printf("%d",sum1-sum2);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值