要计算这个组合数之和,可以使用Java中的组合数公式,即C(n, m) = n! / (m! * (n-m)!)。首先我们可以使用循环和递归的方式来计算组合数:
成都网站建设、网站设计的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给创新互联一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i = 4; i++) {
sum += combination(7, i);
}
sum += combination(7, 7);
System.out.println(sum);
}
public static int combination(int n, int m) {
if (m == 0 || m == n) {
return 1;
}
return combination(n-1, m-1) + combination(n-1, m);
}
}
在这个代码中,我们使用了循环遍历C7^1到C7^4这四个组合数,并且计算它们的和。然后,我们再计算C7^7,并把它的结果加入到总和中。
在计算组合数时,我们使用了递归的方式实现组合数公式。具体来说,当m为0或n时,组合数为1。否则,我们使用递归调用来计算C(n-1, m-1)和C(n-1, m),然后将它们相加得到结果。
上述代码的输出结果为:924。
代码如下:
import java.util.ArrayList;
import java.util.List;
class Org {
private String id;
private String name;
private String pid;
public Org(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
@Override
public String toString() {
return "Org [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}
public class App {
static void find(ListOrg list, String pid) {
list.stream().filter(p - p.getPid().equals(pid))
.forEach(org - {
System.out.println(org);
find(list, org.getId());
});
}
public static void main(String[] args) {
ListOrg list = new ArrayList();
list.add(new Org("111", "公司", "0"));
list.add(new Org("222", "部门", "111"));
list.add(new Org("333", "小组", "222"));
list.add(new Org("444", "员工1", "333"));
list.add(new Org("555", "员工2", "333"));
find(list, "0");
System.out.println("------------------------------------");
find(list, "111");
}
}
运行结果:
这样的用简单的判断就行了 :先判断PID为空的,这个是父节点,然后取出PID为空的Id当做取其子节点的父节点,一次判断就行了,结合列子:取PID为空的ID即1,2,然后把取PId等于1和2的ID即345和6然后分别挂在1和2下,345就是1的子节点,6是2的子节点,有多节点的一次类推(这只是其中一个简单的方法)
代码:
package com.ufotable.test;
public class Test30 {
private static int l,r,u,d;//定义上下左右边界
private static int[][] a=new int[0][0];//数组
private static int y=0,x=0;//初始化坐标
private static int step,temp;//步长,上一个数组的值
private static void add(int y,int x){
temp+=step;a[y][x]=temp;
}
private static void left(){
while(xl)add(y, --x);//未遇到左边界
if(yu){//遇到左边界且未遇到上边界
l++;up();
}
}
private static void right(){
while(xr)add(y, ++x);//未遇到右边界
if(yd){//遇到右边界且未遇到下边界
r--;
down();
}
}
private static void up(){
while(yu)add(--y, x);//未遇到上边界
if(xr){//遇到上边界且未遇到右边界
u++;
right();
}
}
private static void down(){
while(yd)add(++y, x);//未遇到下边界
if(xl){//遇到下边界且未遇到左边界
d--;
left();
}
}
private static void fun(int start,int step,int length){//产生数组(起始值,步长,矩阵边长)
Test30.step=step;
l=u=0;r=d=length-1;
a=new int[length][length];
a[0][0]=temp=start;
up();
}
public static void print(){//输出矩阵
for(int i=0;ia.length;i++){
for(int j=0;ja.length;j++){
System.out.print(a[i][j]+"\t");
}System.out.println();}
}
public static void main(String[] args) {
fun(0,1,10);//测试
print();
}
}
输出结果: