社区讨论
【求救】这题50分 代码有什么问题
题目总版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo2hqkvy
- 此快照首次捕获于
- 2023/10/23 14:02 2 年前
- 此快照最后确认于
- 2023/10/23 14:02 2 年前
题目
最近,某个疾病非常严重,具有很强的传染性,为了研究这种传染病,蜗蜗建立一个传染病模型。有 个人站在一起形成一个方阵,最开始有某几个人患病了,由于这个传染病非常狡猾,所以没有人能发现有人染病。通过研究发现,如果一个人的上下左右某个位置出现了一个患病的人,那么第二天这个人也会患病。现在让你帮蜗蜗计算一下,第 m 天之后总共有多少人感染这个疾病,注意,在这些天中,这些人都会站在原来的位置不动,不会改变位置。
数据输入
第一行两个整数 ,表示有 个人站在一起,模型一共经历 m 天。
接下来
n 行,每行 n 个整数, 代表这个位置的人患病了,0 代表是健康的,整数之间用一个空格隔开。数据输出
一个整数,表示
m 天之后,共有多少人得过这种病。样例输入
CPP3 1
1 1 0
0 0 0
0 0 0
样例输出
CPP5
样例解释
一天之后:
CPP1 1 1
1 1 0
0 0 0
数据规模
保证。
代码
代码只得了50分,请大神指出错误!
C#include <bits/stdc++.h>
using namespace std;
const int MAX = 102;
int n,date,cnt;
int a[MAX+1][MAX+1], will[MAX+1][MAX+1];
int main() {
scanf("%d%d",&n,&date);
if (n ==67) return 1;
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
scanf("%d",a[i]+j);
}
}
// 把a数组开大 省去特判
while (date--) {
// 模拟传染
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (a[i][j]) {
will[i][j] = 0;
continue;
}
if (will[i][j]) {
a[i][j] = 1;
will[i][j] = 0;
}
if (j!=1 && a[i][j-1])
will[i][j] = 1;
if (j!=n && a[i][j+1])
will[i][j] = 1;
if (i!=1 && a[i-1][j])
will[i][j] = 1;
if (i!=n && a[i+1][j])
will[i][j] = 1;
}
}
}
for (int i=1;i<=n;i++) {
for (int j = 1; j <= n; j++) {
if (will[i][j])
a[i][j] = 1;
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (a[i][j])
++cnt;
}
}
printf("%d",cnt);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...