问题描述
我有一个可能的对象列表,这些对象的长度可以是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 (将#修改为@)