(max=0 및 min=1000 지정) 여전히 올바른 결과를 인쇄합니다. 누가 어떻게 작동하는지 설명 좀 해주세요

(max=0 및 min=1000 지정) 여전히 올바른 결과를 인쇄합니다. 누가 어떻게 작동하는지 설명 좀 해주세요
#This function is used to generate random number between (0-100)
function RandomGen {
  for i in {0..4}; do
    arr[i]=$[$RANDOM%100]
    echo Random Number $[$i+1] is ${arr[i]}
  done
}

#This function is used to identify and display Highest and lowest number among generated random number.
function HighLow {
  max=0 # ${arr[0]}
  min=1000 # ${arr[0]}
  for i in {1..4}; do
    if [[ "${arr[i]}" -gt "$max" ]]; then
      let "max = arr[i]"
    fi
    if [[ "${arr[i]}" -lt "$min" ]]; then
      let "min = arr[i]"
    fi
  done
  echo "Highest and lowest number among those random numbers are: $max and $min respectively."
}

답변1

짧은 대답: 우선 은 max가능한 가장 작은 숫자이고 min가능한 가장 큰 숫자보다 높기 때문입니다.

다음은 배열에서 낮은 점과 높은 점을 찾는 간단한 알고리즘입니다. 반복이 4번뿐이므로 무슨 일이 일어나고 있는지 확인하기 위해 종이에 적어 둘 수 있어야 합니다. 또는 루프에 여러 개의 에코를 넣어 무슨 일이 일어나고 있는지 확인할 수 있습니다. 예를 들어:

max=0 # ${arr[0]}
min=1000 # ${arr[0]}
for i in {1..4}; do
    echo "Iteration $i: min=$min, max=$max"
    if [[ "${arr[i]}" -gt "$max" ]]; then
        echo "Found that ${arr[$i]} > $max"
        let "max = arr[i]"

    fi
    if [[ "${arr[i]}" -lt "$min" ]]; then
        echo "Found that ${arr[$i]} <$min"
        let "min = arr[i]" 
    fi
done
echo "Highest and lowest number among those random numbers are: $max and $min respectively."

이것이 당신에게 줄 것입니다

Random Number 1 is 23
Random Number 2 is 19
Random Number 3 is 92
Random Number 4 is 42
Random Number 5 is 12
Iteration 1: min=1000, max=0
Found that 19 > 0
Found that 19 <1000
Iteration 2: min=19, max=19
Found that 92 > 19
Iteration 3: min=19, max=92
Iteration 4: min=19, max=92
Found that 12 <19
Highest and lowest number among those random numbers are: 92 and 12 respectively.

max처음에 1000을 할당하면 문제가 발생합니다.

- - 편집하다 -

i=0from 을 채우고 to 4를 반복했다는 사실을 놓쳤습니다 .i=14

0로 반복하면 4내 대답은 여전히 ​​정확합니다.

그러나 그렇지 않으면 루프 arr[1]arr[4]. 최소값과 최대값이 배열의 이 부분에 있으면 답이 정확합니다. 단, 고정된 값 과 값을 arr[0]기준으로 최소값이나 최대값인 경우 에는 확인되지 않아 최소값이나 최대값을 놓칠 수 있습니다.minmaxarr[0]

제 예에서는 arr[0]최소값인 19보다 큰 23이므로 정답입니다.

관련 정보