谁来解释一下
by ChinaGIAO @ 2019-04-03 08:59:13
@[ChinaGIAO](/space/show?uid=186255)
假设数据是$1000*1000$的
那么你的第一个程序就会访问第1001格,但你的第一个程序只开了1001的数组大小(应为1002)
by Smile_Cindy @ 2019-04-03 09:02:07
@[Alpha](/space/show?uid=87058)
O(∩_∩)O谢谢大佬,但我还是有点不懂
by ChinaGIAO @ 2019-04-03 09:06:03
@[ChinaGIAO](/space/show?uid=186255)
就是数组$A[1001]$的最大下标只有1000的意思
by Smile_Cindy @ 2019-04-03 09:13:38
@[Alpha](/space/show?uid=87058) 我知道了,谢谢
by ChinaGIAO @ 2019-04-03 09:26:32
# 自己打的!!!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int map[1050][1050];//开个数组
char c;
int n,m;
int ans=0;//这就是面积
int main()
{
memset(map,0,sizeof(map));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>c;//输入数字字符
map[i][j]=c-'0';//存数
if(c!='0')
ans+=2;//计算上表面积与下表面积
}
for(int i=1;i<=n;i++)//进行计算
for(int j=1;j<=m;j++)
{
if(map[i-1][j]<map[i][j])
ans+=map[i][j]-map[i-1][j];
if(map[i+1][j]<map[i][j])
ans+=map[i][j]-map[i+1][j];
if(map[i][j+1]<map[i][j])
ans+=map[i][j]-map[i][j+1];
if(map[i][j-1]<map[i][j])
ans+=map[i][j]-map[i][j-1];
}
printf("%d",ans);//输出答案
}
by Atmizz @ 2019-04-03 10:22:11
# 自己打的
```cpp
include<iostream>
include<cstdio>
include<cstring>
include<cmath>
using namespace std;
int map[1050][1050];//开个数组
char c;
int n,m;
int ans=0;//这就是面积
int main()
{
memset(map,0,sizeof(map));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>c;//输入数字字符
map[i][j]=c-'0';//存数
if(c!='0')
ans+=2;//计算上表面积与下表面积
}
for(int i=1;i<=n;i++)//进行计算
for(int j=1;j<=m;j++)
{
if(map[i-1][j]<map[i][j])
ans+=map[i][j]-map[i-1][j];
if(map[i+1][j]<map[i][j])
ans+=map[i][j]-map[i+1][j];
if(map[i][j+1]<map[i][j])
ans+=map[i][j]-map[i][j+1];
if(map[i][j-1]<map[i][j])
ans+=map[i][j]-map[i][j-1];
}
printf("%d",ans);//输出答案
}
```
by Atmizz @ 2019-04-04 18:05:52
其实就是你数组开大一点儿就好了,比如此题n,m<1000,那你就开一个1100不就好了吗,重点就是:不能开小,只能开大,而且越大越好(前提是不会爆)
by 南楼故语 @ 2019-07-26 17:28:58