解题思路:由于这一题需要判断每个点的情况并且决定是否增加数值,因此需要利用二维列表依次进行判断,不能使用一维列表直接存一段字符串,这里将非雷的元素全部替换为0,对每一个雷进行判断,周围的位置如果有非雷点就对其加一
注意事项:全是小错误,要多练习,多debug,笔者翻过的错误点标注在注释里了,感兴趣的看一下,自己也要注意
参考代码:
d=1
while True:
n,m=map(int,input().split())
c=[]
if n==0 and m==0:
break
else:
for i in range(n):
a=input()
b=[]#忘了更新这个
for j in a:
b.append(j)
c.append(b)
for i in range(n):
for j in range(m):
if c[i][j]=='.':
c[i][j]=0#=写成==
for i in range(n):
for j in range(m):
if c[i][j]=='*':
if j>=1 and c[i][j-1]!='*':
c[i][j-1]+=1
if j<=m-2 and c[i][j+1]!='*':#下标从0开始,最大到n-1,m-1
c[i][j+1]+=1
if i>=1 and c[i-1][j]!='*':#if语句从左到右依次进行判断,限定条件应在最左边防止超限
c[i-1][j]+=1
if i<=n-2 and c[i+1][j] !='*':
c[i + 1][j]+=1
if i>=1 and j>=1 and c[i-1][j-1] !='*':
c[i - 1][j - 1]+=1
if i<=n-2 and j >= 1 and c[i+1][j - 1] !='*':
c[i + 1][j - 1]+=1
if i >= 1 and j<=m-2 and c[i - 1][j + 1] !='*':
c[i - 1][j + 1]+=1
if i <=n-2 and j <= m-2 and c[i + 1][j + 1] !='*':
c[i + 1][j + 1]+=1
print('Field #'+str(d)+':')#不要忘了这地方还有个冒号
d+=1#每一遍更新b还怎么标序号,不能更新b
for i in c:
e=''.join(str(j) for j in i)#‘’.join不接受元素有整型的情况,得用命令+for循环形式全给他改成str类型
print(e)
print()
0.0分
1 人评分
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:2576 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:1945 |
输出九九乘法表 (C语言代码)浏览:1649 |
C语言训练-字符串正反连接 (C语言代码)浏览:726 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:744 |
母牛的故事 (C语言代码)浏览:1409 |
2005年春浙江省计算机等级考试二级C 编程题(3) (C语言代码)浏览:416 |
C语言训练-字符串正反连接 (C语言代码)浏览:664 |
时间转换 (Java代码)浏览:617 |
C语言训练-最大数问题 (C语言代码)浏览:648 |