**
1,双小球问题
**
在一个袋子里有无数个红球(R)和蓝球(B),玩家需要选取n个小球,但是不能连续选取两个红球;而且需要考虑选取顺序:选取红蓝(RB)跟蓝红(BR)是两种不同的情况。问:有多少种不同的选取方法?
1. 确定问题参数
有n个小球,所以参数是n;
2. 使用参数表示解
我们使用f(n)为解来表示:在不能连续选取两个红球、虑选取顺序下有多少种选取方法;
3. 在解简单明了的情况下确定简单情景。
当袋子中有一个小球时,有R和B两种情况所以
f(1)=2;
当袋中有两个球时,那么就有RB、BR、BB三种情况所以
f(2)=3;
4. 确定复杂情景与简单情景的关系
(1),当袋中小球个数为n的时候,有两种情况。要么第一个选中B,要么第一个选中R;
(2),如果第一个选中B;那么剩下的n-1个小球就有f(n-1)个可能;
(3),如果第一个选中R,那么与此同时,第二个小球只能是B,因此也只能有n-2个小球有f(n-2)种情况。
所以:
f(n)=f(n-1)+f(n-2);
因此:
f(n)=2; n=1
f(n)=3; n=2
f(n)=f(n-1)+f(n-2); n>2
完整代码如下
import java.util.Scanner;
/**
* 在一个袋子里有无数个红球(R)和蓝球(B),玩家需要选取n个小球,
* 但是不能连续选取两个红球;而且需要考虑选取顺序:选取红蓝(RB)跟蓝红(BR)是两种不同的情况。问:有多少种不同的选取方法?
*/
public class TwoColorBall {
public static void main(String[] args) {
System.out.print("请输入袋中小球的个数:");
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long x = fun(n);
System.out.println(x);
}
public static long fun(long n) {
if (n==1){
return 2;
}
if (n == 2) {
return 3;
}
else
return fun(n-1)+fun(n-2);
}
}
三色球问题
选取小球的问题有多种延伸版本,第一种就是考虑三种颜色的情况。仍然假设一个袋子里有无数个红球(R)、绿球(G)和蓝球(B),在不能连续选取两个红球的情况下选取小球;同样需要考虑选取顺序:选取红蓝(RB)跟蓝红(BR)是两种不同的情况。问:共有多少种选取n个小球的方法?
1. 确定问题参数
有n个小球,所以参数是n;
2. 使用参数表示解
我们使用f(n)为解来表示:在不能连续选取两个红球、虑选取顺序下有多少种选取方法;
3. 在解简单明了的情况下确定简单情景。
当袋子中有一个小球时,有红球R、绿球G和篮球B三种情况所以
f(1) = 3;
当袋中有两个球时,那么就有RB、BR、BB三种情况所以
f(2)=8;
4. 确定复杂情景与简单情景的关系。
当有n个小球时:
(1)如果第一个小球是G,那么剩余的n-1个小球可以是任何小球颜色,有f(n-1)种情况
f(n) = n-1;
(2)如果第一个小球是B,那么剩余的n-1个小球可以是任何小球颜色,有f(n-1)种情况
f(n) = n-1;
(3),如果第一个小球是红色球R、那么第n-1个球就只能是绿球G或者篮球B
- 当第n-1个球为绿球G时,接下来的n-2个球没有颜色限制,可以是任何颜色,因此有f(n-2)种情况
f(n) = n-2;
- 同理当第n-1个球为蓝球G时,接下来的n-2个球没有颜色限制,可以是任何颜色,因此也有f(n-2)种情况
f(n) = n-2;
因此:
f(n) = 3 n=1
f(n) = 8 n=2
f(n)=f(n-1)+f(n-1)+f(n-2)+f(n-2)=2*(f(n-1)+f(n-2)) n>2
代码如下:
import java.util.Scanner;
public class ThreeColorBall {
public static void main(String[] args) {
System.out.print("请输入袋中小球的个数:");
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
System.out.println(fun(n));
}
public static long fun(long n) {
if (n==1){
return 3;
}
if (n == 2) {
return 8;
}
else
return 2*(fun(n-1)+fun(n-2));
}
}
附加限制条件(难点)
这个问题也可以通过附加限制条件来延伸拓展。现在不能连续选取两个红球或两个绿球,但可以连续选取两个蓝球。问:共有多少种选取n个小球的方法?
其实这个问题可以通过分别来求解以此来解决问题。