[問題] 把踩地雷的陣列以數字表示結果
大家好 最近做到一題對我來說滿困擾的題目
雖然我做出來的答案 題庫跑case的結果是對的
但是還是覺得應該有更好的解法 所以上來問問看
(因為我沒修過演算法 所以覺得自己很土法煉鋼= =)
題目:
簡單來說 題目會給Input
第一行先表示這個踩地雷是nxn的陣列
接下來會給n行其中陣列的排序 有地雷就會寫1 沒有就是0
那output就是要印出每一格的周邊地雷數目
本身是地雷給X 不然就給數字 都沒有給-
ex.
1.
input:
4 4
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 1
output:
111-
1X1-
1121
--1X
2.
input:
4 6
0 0 0 0 0 1
0 0 0 0 0 0
0 1 0 0 0 0
1 0 0 0 0 0
output:
----1X
111-11
2X1---
X21---
我的寫法:
import java.util.Scanner;
public class mineSweeper {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int numX = sc.nextInt();
int numY = sc.nextInt();
sc.nextLine();
String[][] inputArray = new String[numX][];
String[][] outputArray = new String[numX][numY];
for(int i=0;i<numX;i++){
inputArray[i] = sc.nextLine().split(" ");
}
for(int j=0;j<numX;j++){
for(int k=0;k<numY;k++){
if(inputArray[j][k].equals("1")){
outputArray[j][k]="X";
}else{
int mineAround=0;
if(j>0 & k>0){
if(inputArray[j-1][k-1].equals("1")){
mineAround++;
}
}
if(j>0 ){
if(inputArray[j-1][k].equals("1")){
mineAround++;
}
}
if(j>0 & k+1<numY){
if(inputArray[j-1][k+1].equals("1")){
mineAround++;
}
}
if(k+1<numY ){
if(inputArray[j][k+1].equals("1")){
mineAround++;
}
}
if(j+1<numX & k+1<numY ){
if(inputArray[j+1][k+1].equals("1")){
mineAround++;
}
}
if(j+1<numX ){
if(inputArray[j+1][k].equals("1")){
mineAround++;
}
}
if(j+1<numX & k>0 ){
if(inputArray[j+1][k-1].equals("1")){
mineAround++;
}
}
if(k>0 ){
if(inputArray[j][k-1].equals("1")){
mineAround++;
}
}
if(mineAround==0){
outputArray[j][k]="-";
}else{
outputArray[j][k]=String.valueOf(mineAround);
}
}
}
}
for(int i=0;i<numX;i++){
for(int j=0;j<numY;j++){
System.out.print(outputArray[i][j]);
}
System.out.println();
}
}
sc.close();
}
}
----------------------------------(分隔線)--------------------------------
程式碼是直接從IDE貼上在用手排的 有點亂不好意思
如果有其他不符合板規的地方 麻煩再跟我說一下 我會改
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.4.126
※ 文章網址: https://www.ptt.cc/bbs/java/M.1493439046.A.C28.html
推
04/29 13:06, , 1F
04/29 13:06, 1F
→
04/29 13:06, , 2F
04/29 13:06, 2F
→
04/29 13:09, , 3F
04/29 13:09, 3F
但是這還是要考慮到array index outofbound的問題
而且因為輸出的是string 所以'-'也要另外處理的感覺
→
04/29 13:09, , 4F
04/29 13:09, 4F
→
04/29 13:09, , 5F
04/29 13:09, 5F
恩..我了解程式碼這樣好看許多
我只是在想有沒有厲害的演算法能夠更聰明的做好
※ 編輯: bb7889 (140.119.121.6), 04/29/2017 13:31:32
→
04/29 14:16, , 6F
04/29 14:16, 6F
→
04/29 14:17, , 7F
04/29 14:17, 7F
→
04/29 14:17, , 8F
04/29 14:17, 8F
→
04/29 14:18, , 9F
04/29 14:18, 9F
→
04/29 14:22, , 10F
04/29 14:22, 10F
→
04/29 14:23, , 11F
04/29 14:23, 11F
java 近期熱門文章
PTT數位生活區 即時熱門文章