昨天偶尔看到一个题目,有8个盘子排成一排,有3个苹果,要将这三个苹果放入盘子中,问有多少中排法,左边连续排三个和右边连续排三个为不同的排法,用程序实现。
程序如下:
public class Handle {
private static int flag = 0;
public static void main(String[] args){
new Handle().addXYZ(1, 2, 3, 8);
System.out.println(flag);
}
/**
* 将第三个数从一加到N
* @param x
* @param y
* @param z
* @param n
*/
private void addZ(int x,int y,int z,int n){
for(;z<=n;z++){
System.out.println(x+" "+y+" "+z);
flag++;
}
}
/**
* 将第二个数加一,一直加到N-1。第三个数为第二个数加1,加到N
* @param x
* @param y
* @param z
* @param n
*/
private void addXY(int x,int y,int z,int n){
for(;y<=n-1;y++){
addZ(x,y,y+1,n);
}
}
/**
* 将第三个数加一,一直加到N-2,第二个数为第一个数加一,一直加到N-1,第三个数为第二个数加一,一直加到N
* @param x
* @param y
* @param z
* @param n
*/
private void addXYZ(int x,int y,int z,int n){
for(;x<=n-2;x++){
addXY(x,x+1,x+2,n);
}
}
}