整数の配列が与えられると、特定の目標に合計される2つの数値のインデックスが返されます。

整数の配列が与えられると、特定の目標に合計される2つの数値のインデックスが返されます。

整数の配列が与えられると、特定の目標に合計される2つの数値のインデックスが返されます。

各入力に解決策があり、同じ要素を2回使用できないと仮定できます。

例: 与えられた数値 = [2, 7, 11, 15], 宛先 = 9,

nums[0] + nums[1] = 2 + 7 = 9 なので [0, 1] が返されます。

Bashでこれを試しましたが、構文エラーのため失敗しました。論理が正しいか、構文エラーがあるか教えてください。

#!/bin/bash
# Given an array of integers, return indices of the two numbers such 
# that they add up to a specific target.

read T
nums=("2" "7" "11" "15")

for i in ${nums[@]}
do
    for j in ${nums[@]}
    do
        if [ "$i" + "$j" == $T ]
            echo "i=$i"
            echo "j=$j"
            break
        fi
    done
done

ベストアンサー1

if対応する必要があり、算術テストには1がthen必要です。(( . . .))

if (( $i + $j == $T )); then

またはそれ以来

式内では、シェル変数はパラメーター拡張構文を使用せずに名前で参照することもできます。

次のように単純化できます。

if (( i + j == T )); then

SHELL GRAMMAR - Compound Commandsサブセクションを参照してくださいman bash


  1. $[ . . . ]次の古い算術評価構文を表示できます。

    if [ $[$i + $j] == $T ]; then
    

    また、合法的です。ただし、これは廃止され、新しいスクリプトには使用しないでください。

おすすめ記事