2017-03-07 1 views
1

시퀀스의 처음 네 숫자에서 가장 큰 숫자를 찾는 방법을 알아 내려고, 다음 네 숫자에서 가장 큰 것을 찾으려고합니다.4 개의 연속 숫자 사이에서 가장 큰 숫자를 찾는 루틴을 작성하는 n 개의 숫자가 주어짐

double max_array(int n, double array[]){ 
    double arr[n]; 
    arr[0] = 0; 
    double max; 
    for(int i = 0; i < n; i++) 
     { 
      if(arr[0] < array[i]) 
       arr[0] = array[i]; 
     } 
    max = arr[0]; 
    return max; 
} 

나는 내가 할 수있는 루틴을 작성하는 내가 여기에 무슨 짓을 사용할 수 있다고 생각 : 순서, 등등 ...

나는 여기에 배열에서 가장 큰 요소를 발견하는 기능을 썼다 내가 묘사 한 후자이지만 어떻게해야할지 모르겠다. 아마도 완전히 새로운 기능을 작성해야하지만 확실하지는 않습니다. 제안 사항에 크게 감사드립니다.

+0

당신은, 당신이 바로 사용할 수있는을 증가시킬 필요가없는 0 'max_array'을 무시 않네 주먹 시간이었다 그것을하기 위해. 배열을 반복하면서 4 개의 요소 (각 반복마다 4 개의 요소 건너 뛰기)를 반복하고 각 반복마다 'n = 4'로 'max_array'를 호출하고 현재 요소를 가리키는 포인터와 동일한 'array'를 호출합니다. – GigaRohan

+0

@GigaRohan 코멘트를 주셔서 감사합니다. C++ 용어에 관해서는 아직 초보자입니다. 그래서 완전히 이해하지 못합니다. 방금 말한 것에 대한 답변을 제공 할 수 있습니까? – Scooby

+0

Anthony D.는 아래 코드를 제공했습니다 – GigaRohan

답변

0

u는 당신이 이미 당신이 그것을 할 수있는 기능을 사용하려면 당신이 이미 가지고있는 함수를 호출하는 다른 함수를 만들 이 방법 .

double* max_array_vec(int n, double array[]){ 
    int max_mumber = n/4 + (n%4); // how many max number you will have 
    double max[max_number]; 
    double temp[4]; 
    arr[0] = 0; 

    for(int i = 0; i < max_number; i++) 
    { 
     std::copy(array+ (3 * i), array+ (3 * (i + 1)), temp); 
     max[i] = max_array(4,temp); 
    } 
    max = arr[0]; 
    return max; 
} 

그러나 전체 프로세스를 수행하는 다른 함수를 만들면 훨씬 쉽게 수행 할 수 있습니다.

편집 번째 부분

double *max_array(int n, double *array){ 
double arr[n/4 + 1] = {-1000, } ;// since ur looking for the biggest number u should initialize tis array with numbers really small like -400 or something like that 
int index = 0; 
for(int i = 0; i < n; i++) 
{ 
    if(i%4 == 0 && i!= 0) 
     index++; 

    if(arr[index] < array[i]) 
     arr[index] = array[i]; 

} 
//printf("\n"); 
//for(int i = 0; i < 4; i++) 
//printf("%f\n ", arr[i]); 

return arr; 
} 

문제는 그 때 난 = 내가 인덱스

+0

두 번째 부분에 대한 코드가 거의있다. 0 0.5 0.25 0.75 0.125 0.625 0.375 0.875 0.0625 0.5625 은 0.3125 0.8125 – Scooby

+0

그런 다음 함수가 0 0.75 0.875 – Scooby

+0

에서를 반환 잘하지만 뭔가 우리가 전달하는 배열을 가정 잘못은 이러한 요소가 다른 단어 arr [0] = 0.75, a rr [1] = 0.875, arr [2] = 0.8125 – Scooby

1

글쎄, 당신은 max_array 다시 사용할 수 있습니다 : N 다음 마지막 요소가 고려되지 않습니다, 말, N = 6 4의 배수가 아닌 경우

// Assume I have an array 'foo' with N elements. 
// In your code, N should be an actual value, like 10, and NOT a variable. 

double V[N/4]; 
int i = 0; 
while (i+4 < N) { 
    // use the i-th element of foo as the 0-th 
    // element of 'array' in max_array. 
    double V[i/4] = max_array(4, &(foo[i])); 

    i += 4; 
} 

은, 위의 코드로,주의하시기 바랍니다 .

예를 들어 foo{ 0.0, 1.0, 1.5, 2.1, 5.0, 10.3 } 인 경우 V은 하나의 요소 만 갖습니다. { 2.1 }.

+2

아마 여기에 요구 사항을 충족시키기 위해'i + = 4'를 원할 것입니다. 마지막 그룹의 경계 케이스는 N이 4의 배수가 아니면 N이 상수라고 가정하면 VLA는 C++ 표준의 일부가 아니기 때문입니다. – paddy

+0

배열 호출 V에 처음 네 개의 숫자를 저장하고 싶다면 V [0]이 첫 번째 4 개의 최대 값이 될 것이고 V [1]이 두 번째 네 개의 최대 값이 될 것입니다. 그렇게 했어? – Scooby

+0

@paddy 아, 고마워. 나는 "* 시퀀스 i의 다음 네 숫자"가 "* 0 ~ 3, 1 ~ 4 등 *"을 의미하기 때문에 '++ i'를 넣었습니다. 'N '에 대해서는'N'을 컴파일시의 상수라고 생각했지만 도움이 된 후에'#define'을 추가했습니다. –

2

원하는대로해야합니다. 복수의 결과, 당신은 입력 배열에있는 각 쿼드 하나가 있습니다

#include <valarray> 
#include <cassert> 

std::valarray<double> maxQuads(std::valarray<double> input) { 
    assert(!(input.size() % 4)); // The input must contain a multiple of 4 values 
    std::valarray<double> output(input.size()/4); 
    for(std::size_t sliceIndex = 0; sliceIndex + 4 < input.size(); sliceIndex += 4) { 
     std::slice slice(sliceIndex, 4, 1); 
     output[sliceIndex/4] = std::valarray(input[slice]).max(); 
    } 
    return output; 
} 

void test() { 
    double aTestArray[] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5}; 
    std::valarray results = maxQuads(std::valarray(aTestArray, 8)); 
    std::cout << "Max of the first 4: " << results[0]; 
    std::cout << "Max of the second 4: " << results[1]; 
} 
+0

함수를 사용하여 복식 배열을 전달할 수 있습니까? – Scooby

+0

@Scooby 두 배의 배열을 전달하는 방법의 예를 추가했습니다. 필요한 경우 래퍼 함수를 ​​사용하여 그렇게 할 수 있습니다. – Vality

+0

배열 호출 V에 처음 네 개의 숫자를 저장하고 싶다면 V [0]이 첫 번째 4 개의 최대 값이 될 것이고 V [1]이 두 번째 네 개의 최대 값이 될 것입니다. 그렇게 했어? – Scooby

관련 문제