全国绿色计算大赛 模拟赛第二阶段(Java)第3关:渡口与船

本文介绍了一种算法,用于计算二维渡口中停泊的船只数量。渡口由字符数组表示,船只用+符号表示,空位用o表示。算法遵循特定规则,包括船只的布局方式和它们之间的最小距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

挑战任务

给定一个渡口(二维的),请计算渡口中停了多少艘船。 船用 + 表示,空位用字母o表示。 你需要遵守以下规则:

  • 给你一个有效的渡口(二维数组),仅由船和空位组成。
  • 船只能水平或者垂直放置。换句话说,船只能由 1 行, N 列组成,或者 N 行, 1 列组成,其中N可以是任意大小。
  • 两艘船之间至少有一个水平或垂直的空位分隔,即没有相邻的船。

编程要求

补充完善右侧代码区中的countOfShips(char[][] ferry)函数,实现根据输入的数组来判断船的数量,将船的数量作为返回值返回。

测试说明

样例1

输入:
3 4
+ + + +
o o o o
o 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;
     }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值