0

我对如何查看这些生成的数组的方法和过程有疑问。基本上我想创建一个数组 [a,b,c,(a+b+c)] 以及第二个数组 [d,e,f,(d+e+f)] 如果第三个array1 和 array2 中的元素相同,将数组显示为字符串。

int num = 10;
for(int a = 0; a < num; a++){
   for(int b = 0; b < num; b++){
      for(int c = 0; c < num; c++){
         if(a<=b && b<=c){
           arrayOne[0] = a;
           arrayOne[1] = b;
           arrayOne[2] = c;
           arrayOne[3] = (a+b+c);
         }
      }
   }
}

for(int d = 0; d < num; e++){
   for(int e = 0; e < num; e++){
      for(int f = 0; f < num; f++){
         if(d<=e && e<=f){
           arrayTwo[0] = d;
           arrayTwo[1] = e;
           arrayTwo[2] = f;
           arrayTwo[3] = (f -(d+e));
         }
      }
   }
}

如您所见,我已经超出了树桩。我不太确定在哪里可以获得数组的每次迭代并通过匹配每个数组中的总和以及显示它们所在的相应数组来比较值。谢谢大家先进的。

4

2 回答 2

1
int givenNumber = 10;
int []arrayOne = new int [4]; 
int []arrayTwo = new int [4];
int count = 0;

for ( int i = 0; i < givenNumber; i ++)
{    
    for ( int x = 0; x < givenNumber; x ++ )
    {
        for ( int a = 0; a < givenNumber; a++ ){
            arrayOne[0] = (int)(a * java.lang.Math.random() + x);
            arrayOne[1] = (int)(a * java.lang.Math.random() + x);
            arrayOne[2] = (int)(a * java.lang.Math.random() + x);
            arrayOne[3] = (int)(arrayOne[0]+arrayOne[1]+arrayOne[2]);
        }

        for ( int b = 0; b < givenNumber; b++ ){
            arrayTwo[0] = (int)(b * java.lang.Math.random() + x);
            arrayTwo[1] = (int)(b * java.lang.Math.random() + x);
            arrayTwo[2] = (int)(b * java.lang.Math.random() + x);
            arrayTwo[3] = (int)(arrayTwo[0]+arrayTwo[1]+arrayTwo[2]);
        }


        if (arrayOne[3] == arrayTwo[3])
        {
            for ( int a = 0; a < 2; a++ )
            {
                System.out.print(arrayOne[a] + " + ");
            }   System.out.print(arrayOne[2] + " = " + arrayOne[3] + " = ");

            for ( int a = 0; a < 2; a++ )
            {
                System.out.print(arrayTwo[a] + " + ");
            }   System.out.print(arrayTwo[2]);      

            System.out.println("\n");
            count += 1;
        }   
    }

}
        if (count == 0)
            System.out.println(
                "\nOops! you dont have a match...\n" +
                    "Please try running the program again.\n");
于 2013-10-05T07:51:33.653 回答
1

如果我正确理解了您的问题,a=1, b=3, c=4并且d=2, e=3, f=3您想按照1 + 3 + 4 = 8 = 2 + 3 + 3. 首先,您现在正在做的是创建两个数组,例如评论中描述的 Floris。您要做的是将所有值存储在一个数组数组中,如下所示:

int max; \\ To determine the value of max see the edit below.
int array[][] = new int[max][num];
int index = 0;
for (int a=0; a < num; a++) {
    for (int b=a; b < num; b++) {
        for (int c=b; c < num; c++) {
            array[index][0] = a;
            array[index][1] = b;
            array[index][2] = c;
            array[index][3] = a + b + c;
            index++;
        }
    }
}

for (int i = 0; i < max; i++) {
    for (int j = i; j < max; j++) {
        if (array[i][3] == array[j][3]) {
            string outString = array[i][0] + " + " + array[i][1] + " + " + array[i][2] + " = " + array[i][3] + " = " + array[j][0] + " + " + array[j][1] + " + " + array[i][2];
            System.out.println(outString);
        }
    }
}

b您可以看到,我从fromacfrom开始提高了性能,b因为您丢弃了 whereb < a或的所有值c < b。这也应该消除您if声明的需要(我说应该只是因为我没有测试过这个)。由于三重嵌套循环的复杂性,我需要使用独立索引。

编辑2:忽略我。我做错了组合数。让是包含元素An,k的无序长度集的数量(这将实现您想要的)。然后。我们知道 An,1 = n(因为值是 0, 1, 2, 3, 4, ..., n),并且(因为唯一的值可以是 11111...1 n 次)。在这种情况下,我们对and感兴趣,因此插入我们得到的值k[n]An,k = An-1,k + An,k-1A1,n = 1n= numk = 3

A_num,3 = A_num-1,3 + A_num,2

递归地应用方程,直到你得到答案。例如,如果 num 为 5:

A_5,3 = A_4,3 + A_5,2
      = A_3,3 + A_4,2 + A_4,2 + A_5,1
      = A_3,3 + 2(A_4,2) + 5
      = A_2,3 + A_3,2 + 2(A_3,2) + 2(A_4,1) + 5
      = A_2,3 + 3(A_3,2) + 2(4) + 5
      = A_1,3 + A_2,2 + 3(A_2,2) + 3(A_3,1) + 2(4) + 5
      = 1 + 4(A_2,2) + 3(3) + 2(4) + 5
      = 1 + 4(A_1,2) + 4(A_2,1) + 3(3) + 2(4) + 5
      = 1 + 4(1) + 4(2) + 3(3) + 2(4) + 5
      = 5(1) + 4(2) + 3(3) + 2(4) + 5

看起来这可能会简化为(num + (num - 1)(2) + (num - 2)(3) + ... + (2)(num - 1) + num)哪个是,binomial(num, num)但我还没有做确定的工作。

于 2013-10-05T06:09:14.397 回答