创建由+6个对象组成的3对对象,其中每个对象对都有唯一且未重复的对象

问题描述

我有一个可能的对象列表,这些对象的长度可以是6个或更多(+6个光子/ gammas),我需要从该列表中制作3对(3个介子)。这些对都必须具有唯一的对象,并且一旦成对存在,就无法再使用伽玛。

例如如果pion1是由gamma1(代码ig1)和gamma2(ig2)制成的,则pions2和pions3必须由gammas3、4、5、6等的所有可能组合制成(可能有6个以上伽玛,但我只关心3个介子),等等。

我尝试通过以下方式进行几个for循环:

int n_g = 8; // n_g >= 6
boolean hasDVPi0P = false;
for (int ig1 = 0; ig1 < n_g-5 && !hasDVPi0P ; ig1++) {
    for (int ig2 = ig1+1; ig2 < n_g-4 && !hasDVPi0P ; ig2++) {
        for (int ig3 = ig2+1; ig3 < n_g-3 && !hasDVPi0P ; ig3++) {
            for (int ig4 = ig3+1; ig4 < n_g-2 && !hasDVPi0P ; ig4++) {
                for (int ig5 = ig4+1; ig5 < n_g-1 && !hasDVPi0P ; ig5++) {
                    for (int ig6 = ig5+1; ig6 < n_g && !hasDVPi0P ; ig6++) {
                        System.out.println("(" + ig1 + "," + ig2 + "),(" + ig3 + "," + ig4 + "),(" + ig5 + "," + ig6 + ")");
                        }
                    }
                }
        }
    }
}  

为我提供以下输出:

(0,1),(2,3),(4,5)
(0,6)
(0,7)
(0,(5,(6,4),5),(3,2),7)
(1,6)
(1,7)
(2,7)

最初我认为是正确的直到我检查了n_g = 6,这让我明白了

(0,5)

这显然是错误的输出。我尝试通过以下方式找到6个伽玛的所有唯一可能对:

n_g=6;
for(int ig1 = 0; ig1 < n_g-1; ig1++) {
    for(int ig2 = ig1+1; ig2 < n_g; ig2++) {
        System.out.print("(" + ig1 + "," + ig2 + ") ");
    }
    System.out.println("");
}

这给了我

(0,1) (0,2) (0,3) (0,4) (0,5) 
(1,2) (1,3) (1,4) (1,5) 
(2,3) (2,4) (2,5) 
(3,4) (3,5) 
(4,5)

有人对我将如何使用6个for循环编辑第一个代码段以获取3对pion的方法有任何想法,如果将gamma用于1个pion,则不再重复?对中的顺序很重要,这意味着如果一对为(0,1),则对(1,0)是不同的并且不可互换。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)