摆渡的士兵分析(一)以及代码实现

本题截取于算法设计与分析基础第五章课后习题第一题,摆渡的士兵,题目愿意如下:

n个士兵组成的小分队必须越过一条又深又宽,又没有桥的河。他们注意到在岸边有两个十二岁大的小男孩在玩划艇。然而船非常小,只能容纳两个男孩或者是一个士兵。怎样才能让士兵渡过河并且留下两个男孩共同操作这条船?这条船要与岸之间横渡多少次?

下面用图来对问题进行描述与分析:

假设小孩与士兵在同一岸边

士兵:1 孩子:2

因此可以得到n个士兵时求解的公式如下:

F(n) = F(n-1) + 4 n>1

F(1) = 4 n=4

则求解n个士兵时所需要的渡河次数的代码为:

import java.util.Scanner;


public class ThroughRiver {
	public int calculateNum(int soldier){
		int number;
		if(soldier==0){
			number = 0;
		}else if(soldier == 1){
			number = 4;
		}else{
			number = calculateNum(soldier-1)+4;
		}
		return number;
	}
	public static void main(String[] args){
		ThroughRiver tr = new ThroughRiver();
		Scanner sc = new Scanner(System.in);
		int soldier = sc.nextInt();
		int moveNum= 0;
		moveNum = tr.calculateNum(soldier);
		System.out.println("需要移动的次数为: "+moveNum);
		
	}

}
程序的结果为:

3 需要移动的次数为: 12

经验分享 程序员 微信小程序 职场和发展