배열에서 가장 큰 숫자 얻기

배열에서 가장 큰 숫자 얻기

2 x 2 배열이 포함된 파일이 있습니다.

데이터

1: 6.1703
541.631 46.0391

2: 6.1930
537.446 45.9239

3: 6.1931
177.171 288.579

4: 6.1939
167.171 298.579

5: 8.2281
 533.686 53.7245

6: 8.6437
519.219 65.0547

7: 9.0823
484.191 95.0753

8: 9.3884
 237.75 240.082

9: 9.4701
 167.525 246.234

10: 9.7268
 411.929 70.7877

각 행렬의 위치 (1,2) 값을 보고 6.1937에 가깝고 요소 (2,1)의 값이 더 큰 경우 선택해야 합니다. 이 예에서는 선택한 값이 6.1930이어야 합니다. (이 부분은 해결되었습니다.선택 비교 기준에 따라 배열 요소 수를 기록하는 방법)

둘째, 각 행렬의 (2,2) 위치에서 가장 높은 값을 선택한 다음 해당 (1,2) 요소를 인쇄해야 합니다. 이 경우 선택한 값은 6.1939입니다. (이 부분은 스크립트 수정이 필요합니다.)

유사한 문제에 대한 이전 솔루션이 있었습니다.

해결책

#!/usr/bin/perl
use warnings;
use strict;

my $close_to = 6.1937;

my ($close, $lowest);

$/ = q();
while (<>) {
    my @arr = split;
    if ((! defined $close || abs($arr[1] - $close_to) < abs($close - $close_to))
        && $arr[2] > $arr[3]
        ) {
        $close = $arr[1];
    }
    if ((! defined $lowest || $arr[1] < $lowest)
        && $arr[2] < $arr[3]
        ) {
        $lowest = $arr[1];
    }
    if (eof) {
        print "$close $lowest\n";
        undef $close;
        undef $lowest;
    }
}

스크립트의 이 부분을 수정해야 할 것 같은데 어떻게 해야 할지 모르겠습니다.

if ((! defined $lowest || $arr[1] < $lowest)
       && $arr[2] < $arr[3]
        ) {
       $lowest = $arr[1];
}

데이터의 출력은 다음과 같아야 합니다.

6.1930  6.1939

답변1

이 코드 부분을 실제로 변경해야 합니다. 문제는 이제 두 개의 값, 즉 지금까지 발견된 가장 높은 값과 해당 (1,2) 요소를 저장해야 한다는 것입니다.

#!/usr/bin/perl
use warnings;
use strict;

my $close_to = 6.1937;

my ($close, $highest, $corr_highest);

$/ = q();
while (<>) {
    my @arr = split;
    if ((! defined $close || abs($arr[1] - $close_to) < abs($close - $close_to))
        && $arr[2] > $arr[3]
        ) {
        $close = $arr[1];
    }
    if (! defined $highest || $arr[3] > $highest) {
        ($highest, $corr_highest) = @arr[3, 1];

    }
    if (eof) {
        print "$close $corr_highest\n";
        undef $_ for $close, $highest, $corr_highest;
    }
}

관련 정보