嵌套For循环和特定的数组元素搜索

时间:2013-10-05 05:06:51

标签: java arrays data-structures

我对如何查看这些生成的数组的方法和过程有疑问。 基本上我想创建一个[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));
         }
      }
   }
}

你可以看到我超越了stump.I我不太清楚我在哪里可以得到数组的每次迭代,并通过匹配每个数组中的总和并显示它们所在的相应数组来比较值。谢谢你们都在先进。

2 个答案:

答案 0 :(得分:1)

如果a=1, b=3, c=4d=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开始a而从c开始b,从而提高了效果,因为您丢弃了b < ac < b的所有值if。这也应该消除你An,k声明的需要(我说应该只因为我没有测试过这个)。由于三重嵌套循环的复杂性,我需要使用独立索引。

编辑2:忽略我。我把组合学做错了。设k[n]中包含元素的无序长度An,k = An-1,k + An,k-1的数量(这将达到您的要求)。然后是A1,n = 1。我们知道An,1 = n(因为值是0,1,2,3,4,...,n)和n= num(因为唯一的值可以是11111 ... 1 n次)。在这种情况下,我们对k = 3A_num,3 = A_num-1,3 + A_num,2 感兴趣,因此插入我们获得的值

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为5:

(num + (num - 1)(2) + (num - 2)(3) + ... + (2)(num - 1) + num)

看起来这可能会简化为binomial(num, num) {{1}},但我还没有完成确定的工作。

答案 1 :(得分: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");