本题截取于算法设计与分析基础第五章课后习题第一题,摆渡的士兵,题目愿意如下:
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
---------------------
作者:ivory_lei
来源:CSDN
原文:https://blog.csdn.net/ivory_Lei/article/details/6946049
版权声明:本文为博主原创文章,转载请附上博文链接!