我的组合有问题。
我需要增加6个数字的最后一个数字,如果最后一个数字是50倒数第二个增加1。
我有这个代码可以找到所有的排列。但我想要组合。
我需要如此已经程序生成1 2 3 4 5 6再也没有生成这个数字的组合所以1 2 3 4 5 6就像6 5 4 3 2 1和6 1 2 3 4 5 ... / p>
hladaj[N-2]++;
while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-2]==hladaj[N-4])||(hladaj[N-2]==hladaj[N-5])||(hladaj[N-2]==hladaj[N-6])||(hladaj[N-2]==hladaj[N-7]))){
hladaj[N-2]++;
}
if (hladaj[N-2]>MAXC) {
hladaj[N-2]=hladaj[N-2]-MAXC;
hladaj[N-3]++;
while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-2]==hladaj[N-4])||(hladaj[N-2]==hladaj[N-5])||(hladaj[N-2]==hladaj[N-6])||(hladaj[N-2]==hladaj[N-7]))){
hladaj[N-2]++;
}
while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-3]==hladaj[N-7]))){
hladaj[N-3]++;
}
if (hladaj[N-3]>MAXC) {
hladaj[N-3]=hladaj[N-3]-MAXC;
hladaj[N-4]++;
while(((hladaj[N-3]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-3]==hladaj[N-7]))){
hladaj[N-3]++;
}
while(((hladaj[N-4]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-7]))){
hladaj[N-4]++;
}
if (hladaj[N-4]>MAXC) {
hladaj[N-4]=hladaj[N-4]-MAXC;
hladaj[N-5]++;
while(((hladaj[N-4]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-4])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-7]))){
hladaj[N-4]++;
}
while(((hladaj[N-5]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-7]))){
hladaj[N-5]++;
}
if (hladaj[N-5]>MAXC) {
hladaj[N-5]=hladaj[N-5]-MAXC;
hladaj[N-6]++;
while(((hladaj[N-5]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-5])||(hladaj[N-4]==hladaj[N-5])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-7]))){
hladaj[N-5]++;
}
while(((hladaj[N-6]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-6]==hladaj[N-7]))){
hladaj[N-6]++;
}
if (hladaj[N-6]>MAXC) {
hladaj[N-6]=hladaj[N-6]-MAXC;
hladaj[N-7]++;
while(((hladaj[N-6]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-6])||(hladaj[N-4]==hladaj[N-6])||(hladaj[N-5]==hladaj[N-6])||(hladaj[N-6]==hladaj[N-7]))){
hladaj[N-6]++;
}
while(((hladaj[N-7]==hladaj[N-2])||(hladaj[N-3]==hladaj[N-7])||(hladaj[N-4]==hladaj[N-7])||(hladaj[N-5]==hladaj[N-7])||(hladaj[N-6]==hladaj[N-7]))){
hladaj[N-7]++;
}
if (hladaj[N-7]>MAXC) {
hladaj[N-7]=MAXC;
return true;
}
}
}
}
}
此代码生成1 2 3 4 5 6,6 5 4 3 2 1我需要如果生成其中一种组合,则此组合不再生成。
请您修改我的代码或...
(我需要处理所有生成的数字[6],但现在我浪费时间,因为我用相同的数字工作了120次。)
由于
答案 0 :(得分:0)
public static void main(String[] args){
int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};
combinations2(arr, 7, 0, new int[7]);
}
static void combinations2(int[] arr, int pocet, int startPosition, int[] result){
if (pocet == 0){
System.out.println(Arrays.toString(result));
return;
}
for (int i = startPosition; i <= arr.length-pocet; i++){
result[result.length - pocet] = arr[i];
combinations2(arr, pocet-1, i+1, result);
}
}