難題解析


在一個 4X4 大小的囚房中,關著一個身高 3 的囚犯。這個囚犯因為後背受傷,所以睡覺時必定側臥且將雙手伸長,形成一個 3X2 的「 L 」形狀;但是囚房內經常會堆放一些不可移動的障礙物,所以這個囚犯必須在囚房內找出可以用「 L 」形姿勢睡臥的空間。
現在要你寫一個程式,幫這個囚犯找出共有幾個可以睡臥的姿勢。以下圖為例,黑色方塊表示障礙物,而這個囚犯能睡臥的的空間以白色空格表示,在圖中囚犯在上邊連續空白處有 1 個可睡臥空間,在下邊連續空白處有 2 個可睡臥空間。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

java

import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[][] arr =new int [8][8]; //擴充陣列 int sum=0; for(int i=0;i<8;i++) for(int j=0;j<8;j++) arr[i][j]=1; for(int i=2;i<6;i++) for(int j=2;j<6;j++) arr[i][j]=sc.nextInt(); for(int i=2;i<6;i++) for(int j=2;j<6;j++){ if(arr[i][j]==0){ if(arr[i-1][j]==0){ //up if(arr[i-1][j+1]==0 && arr[i-1][j+2]==0){ //System.out.println("up-right"); sum++; } if(arr[i-1][j-1]==0 && arr[i-1][j-2]==0){ //System.out.println("up-left"); sum++; } } if(arr[i+1][j]==0){ //down if(arr[i+1][j+1]==0 && arr[i+1][j+2]==0){ //System.out.println("down-right"); sum++; } if(arr[i+1][j-1]==0 && arr[i+1][j-2]==0){ //System.out.println("down-left"); sum++; } } if(arr[i][j+1]==0){ //right if(arr[i-1][j+1]==0 && arr[i-2][j+1]==0){ //System.out.println("right-down"); sum++; } if(arr[i+1][j+1]==0 && arr[i+2][j+1]==0){ //System.out.println("right-up"); sum++; } } if(arr[i][j-1]==0){ //left if(arr[i-1][j-1]==0 && arr[i-2][j-1]==0){ //System.out.println("left-down"); sum++; } if(arr[i+1][j-1]==0 && arr[i+2][j-1]==0){ //System.out.println("left-up"); sum++; } } } } System.out.println(sum); } }