1. 程式人生 > >全國綠色計算大賽 模擬賽第二階段(Java)第3關:渡口與船

全國綠色計算大賽 模擬賽第二階段(Java)第3關:渡口與船

挑戰任務

給定一個渡口(二維的),請計算渡口中停了多少艘船。 船用 + 表示,空位用字母o表示。 你需要遵守以下規則:

  • 給你一個有效的渡口(二維陣列),僅由船和空位組成。
  • 船隻能水平或者垂直放置。換句話說,船隻能由 1 行, N 列組成,或者 N 行, 1 列組成,其中N可以是任意大小。
  • 兩艘船之間至少有一個水平或垂直的空位分隔,即沒有相鄰的船。

程式設計要求

補充完善右側程式碼區中的countOfShips(char[][] ferry)函式,實現根據輸入的陣列來判斷船的數量,將船的數量作為返回值返回。

測試說明

樣例1

輸入:3 4+ + + +o o o oo o o o

輸出:

1

樣例2

輸入:3 4+ o o +o o o +o o o +

輸出:

2

注意:右側測試集中有輸入引數傳入,如:3 4 ,這兩個數字是後臺構建渡口時傳入的大小,不會作為函式countOfShips的引數傳入,可以忽略這兩個數字的作用。

無效樣例:

o o o ++ + + +o o o +

你不會收到這樣的無效樣例,因為船之間至少會有一個空位將它們分開。

開始挑戰吧,祝你成功!

package step3;

public class Task {

	 public int countOfShips(char[][] ferry) {
			int boat = 0;
		  /**************BEGIN************/
		for(int i = 0 ; i < ferry.length;i++) {
			for(int j = 0 ; j < ferry[i].length;j++) {
				if(ferry[i][j] == '+') {
					for(int k = i+1 ; k < ferry.length ; k++) {
						if(ferry[k][j]=='o') {
							break;
						}else {
							ferry[k][j]='o';//把查過的變為o
						}

					}
					
					for(int k = j+1 ; k < ferry[i].length ; k++) {
						j = k;
						if(ferry[i][k]=='o') {
							break;
						}
					}
					boat++;
				}
			}
		}
	         
	      /***********END ***************/
		return boat;
     }
}