2013-10-05 4 views
0

이러한 생성 된 배열을 보는 방법 및 방법에 대한 질문이 있습니다. 기본적으로 [d, e, f, (d + e + f)]의 두 번째 배열뿐만 아니라 [a, b, c, (a + b + c)]의 배열을 만들고 싶습니다. array1과 array2의 세 번째 요소가 동일하면 배열을 문자열로 표시하십시오.중첩 된 For 루프 및 특정 배열 요소 검색

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)); 
     } 
     } 
    } 
} 

당신은 내가 배열의 각 반복을 얻을 수 및 각 배열의 금액을 일치하고뿐만 아니라 각각의 배열을 표시하여 값을 비교할 수있는 등 걸 아주 확실하지 않다 넘어 내가 볼 수있는대로 모두에게 진심으로 감사드립니다.

+0

배열의 모양을 정확히 나타낼 수 있습니까? 지금은 길이가 4 인 배열이 두 개있는 것 같고 사용하지 않고 값을 반복적으로 덮어 쓰는 것입니다. – Maria

+1

지금 당신은'a, b, c '를 독립적으로 루핑하고,'d, e, f'를 반복합니다. 첫 번째 중첩 된'for'가 끝날 때 배열에'[num, num, num, 3 * num]'이 있습니다. 원칙적으로 두 번째 루프의 모든 반복은 첫 번째 루프의 해당 반복과 동일한 데이터를 생성하며 중첩 루프는 같은 값으로 종료됩니다. 당신이 성취하려는 것을 확신하지 못합니까? – Floris

+0

자신의 다른 실행 시간에 두 개의 배열을 만들려고하고 결국 arrayOne과 arrayTwo가 각각의 배열의 세 번째 요소에서 같은 합계를 갖는 경우에만 찾고 생성 한 모든 배열을 스캔하려고합니다. 존경하는 배열을 표시하십시오 – Mario

답변

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에서 bc을 시작하여 성능을 향상 것을 볼 수 있습니다

여기서는 b < a 또는 c < b입니다. 이것은 또한 이어야합니다 귀하의 if 진술에 대한 필요성을 제거해야합니다 (나는 이것을 테스트하지 않았기 때문에 말해야합니다). 트리플 중첩 루프의 복잡성 때문에 독립 인덱스를 사용해야했습니다.

편집 2 : 나를 무시하십시오. 나는 조합론을 잘못했다. An,k을 길이가 k 인 정렬되지 않은 번호 집합으로 구성하고 [n]의 요소를 갖도록합니다 (원하는 것을 얻을 수 있음). 그런 다음 An,k = An-1,k + An,k-1. 우리는 An, 1 = n (값은 0, 1, 2, 3, 4, ..., n이므로)과 A1,n = 1 (유일한 값은 11111 ... 1 n 번일 수 있기 때문에)을 알고 있습니다. 이 경우 우리는 n= numk = 3에 관심이있는, 그래서 값을 연결 우리는

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

당신이 대답에 와서 재귀 때까지 식을 적용받을. 예를 들어, 납입 5 인 경우 :이 binomial(num, num)하지만 내가 확실히 말할 수있는 일을하지 않은 (num + (num - 1)(2) + (num - 2)(3) + ... + (2)(num - 1) + num)로 단순화 할 수있다처럼

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 

것 같습니다.

+0

문자열 결합이 다소 엉망이라는 것을 알고 있습니다.원하는 경우 다른 것으로 변경할 수 있습니다. – Maria

+0

두 번째'for' 루프의'if 조건'은'=='을 포함해야하고'='는 포함하지 않아야합니다. 테스트 한 적은 없지만 여전히 할당입니다. 두 값을 비교해야 할 때 :-) +1 나머지는 질문이 아직 나에게 불분명하지만. –

+0

감사합니다. @nIcEcOw! 나는 당신의 교정에 따라 변경했다 : – Maria

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"); 
+0

좋아,이 작동하는 것하지만 수학 연산을 변경하고 싶습니다. arrayOne [3] = (long) Math.pow (a, 5) + (long) Math.pow (b, 5) arrayTwo [3] = (long) Math.pow (f, 5) - ((long) Math.pow (d, 5) + (long) Math.pow (e, 5)); – Mario