一个代码错误原因
本帖最后由 202021130162 于 2021-2-8 20:51 编辑题目链接:
https://www.luogu.com.cn/problem/P2670
这是正确代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b; //a行b列
char m;
int n;
for(int i=0;i<101;i++)
for(int j=0;j<101;j++)
n=0; //初始化
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
{
cin>>m; //输入每行的地雷情况
if(m=='*')
{
n++;
n++;
n++;
n++;
n++;
n++;
n++;
n++; //相邻的八个格子都+1
}
}
//储存完毕,开始输出
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
if(m=='*')
cout<<"*";
else
cout<<n;
}
cout<<'\n';
}
return 0;
}
我的问题是:
对于:
int n;
for(int i=0;i<101;i++)
for(int j=0;j<101;j++)
n=0; //初始化
将这一段中的101,
1.改成输入的a和b,即n,为什么得到的结果就是错误的?
2.改成100,即n,也会有测试点无法通过?
C语言不支持对数组大小进行动态定义,C99可以,改成100的话,你循环中输入了101个值,但只有100个存储空间 一世轻尘 发表于 2021-2-2 10:07
C语言不支持对数组大小进行动态定义,C99可以,改成100的话,你循环中输入了101个值,但只有100个存储空间
1.可是平时代码中可以这样啊:
int n;
cin>>n;
int a;
这样是可以正常运行的
2.题目范围在,将代码中所有101换成100应该也没有超出范围吧?但是题目答案还是不对? #include <bits/stdc++.h>
using namespace std;
char grid;
int ans;
int n, m;
int main(void){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> grid;
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(grid == '*'){
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
if(grid == '?') ans++;
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(grid == '*') cout << "*";
else cout << ans;
}
cout << '\n';
}
return 0;
} 你的代码是错的吧,
n,m是二维数组,你这样写n[],m[],是错的
baige 发表于 2021-2-3 21:07
你的代码是错的吧,
n,m是二维数组,你这样写n[],m[],是错的
代码已修改,但帖子内的两个问题尚未解决,希望大牛们看看{:5_108:} 202021130162 发表于 2021-2-3 18:53
1.可是平时代码中可以这样啊:
int n;
cin>>n;
标准根本就不允许, 这是非法的, g++ 给你开了后门而已。 永恒的蓝色梦想 发表于 2021-2-10 12:00
标准根本就不允许, 这是非法的, g++ 给你开了后门而已。
这样啊,就是说这种用法是错的,但是运行的时候为了体谅一下使用者还是让它跑通了? 202021130162 发表于 2021-2-10 18:19
这样啊,就是说这种用法是错的,但是运行的时候为了体谅一下使用者还是让它跑通了?
差不多。
变长数组是 C 标准, 不是 C++ 标准, 因此有的编译器不通过。 NOIP的题啊{:10_256:}@weiter
页:
[1]