首页 新闻 会员 周边 捐助

这个程序输出为何不对?

0
悬赏园豆:5 [已解决问题] 解决于 2012-09-20 15:15

public class EchoPlayer {

static int M = 5;
static int N = 4;
static int[][] b = new int[5][N];
static int k=0;
public static void main(String[] args){

C(5,4,4);

System.out.println();


for(int i=0;i<5;i++){
for(int j=0;j<N;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}

}

static void C(int m,int n,int T){

int i,j;
for(i=n;i<=m;i++) {

b[k][n-1] = i;

if(n>1)
C(i-1,n-1,T);
else {
for(j=0;j<=T-1;j++){

System.out.print(b[k][j] + " ");

}

System.out.println();
k++;
}
}
}
}

 

输出:

1 2 3 4
1 2 3 5
1 2 4 0
1 3 0 0
2 0 0 0

1 2 3 4
1 2 3 5
1 2 4 0
1 3 0 0
2 0 0 0

斗榖於菟的主页 斗榖於菟 | 初学一级 | 园豆:60
提问于:2012-09-20 13:13
< >
分享
最佳答案
0

到底哪儿不对你得说啊?

收获园豆:5
wang_yb | 老鸟四级 |园豆:4891 | 2012-09-20 14:11

他应该输出1 2 3 4 5取出4个数的组合,一共五种情况,为啥从第三种开始就有的位置为零了。

斗榖於菟 | 园豆:60 (初学一级) | 2012-09-20 14:19

@斗榖於菟: 

递归的有问题,第一次是以4为最大值递归4次,第二次以5为最大值递归4次,

然后依次是 :

以4为最大值递归3次(有1个0) 即n=3,m=4

以3为最大值递归2次(有2个0)即n=2,m=3

以2为最大值递归1次(有3个0)即n=1,m=2

这个算法是什么原理?实现的有问题

wang_yb | 园豆:4891 (老鸟四级) | 2012-09-20 14:50

@斗榖於菟: 

修改起来也很简单,加一句就行。

for(j=0;j<=T-1;j++){
    b[k][j] = b[k][j]==0 ? b[k-1][j] : b[k][j];  // 加这一句,意思就是如果没有值就用上次的值
    System.out.print(b[k][j] + " ");
} 

 

 

wang_yb | 园豆:4891 (老鸟四级) | 2012-09-20 15:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册