解题思路:
难的是翻译,再次体现学好英语的重要。
大意就是跟window自带的扫雷一样,数字提醒你它的四周有多少雷,输出末尾要空行,提交时忘了空行错了两次...
参考代码:
#include<bits/stdc++.h> using namespace std; int main(){ int n, m, t = 1; cin >> n >> m; while ( n != 0 && m != 0){ int i, j; char saolei[n][m]; int jilu[n][m]; for( i = 0 ; i < n; i++) //初始化 for( j = 0; j < m; j++ ) jilu[i][j] = 0; for( i = 0 ; i < n; i++) for( j = 0; j < m; j++ ){ cin >> saolei[i][j]; if( saolei[i][j] == '*' ){ //发现地雷 jilu[i][j] = -1; //把地雷记录为-1,方便后续处理 if( i > 0) if(jilu[i-1][j] != -1 ) //如果此处是地雷,则无需++,下同 jilu[i-1][j]++; if( i+1 < n) if( jilu[i+1][j] != -1 ) jilu[i+1][j]++; if( j > 0) if( jilu[i][j-1] != -1) jilu[i][j-1]++; if( j+1 < m) if( jilu[i][j+1] != -1) jilu[i][j+1]++; if( i > 0 && j > 0) if( jilu[i-1][j-1] != -1) jilu[i-1][j-1]++; if( i+1 < n && j+1 < m) if( jilu[i+1][j+1] != -1) jilu[i+1][j+1]++; if( j+1 < m && i > 0) if( jilu[i-1][j+1] != -1) jilu[i-1][j+1]++; if( i+1 < n && j>0) if( jilu[i+1][j-1] != -1) jilu[i+1][j-1]++; } } cout << "Field #" << t++ << ":" << endl; for( i = 0; i < n; i++){ for( j = 0; j < m; j++){ if( jilu[i][j] == -1) //如果是雷, 输出‘*’ cout << "*" ; else cout << jilu[i][j]; } cout << endl; } cout <<endl; //输出最后有个空行 cin >> n >> m; } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:436 |
淘淘的名单 (C语言代码)答案错误???浏览:624 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:648 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:616 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:773 |
蚂蚁感冒 (C语言代码)浏览:1408 |
【偶数求和】 (C语言代码)浏览:460 |
出圈】指针malloc版浏览:377 |