シーケンスのすべての2番目の値を特殊文字「*」に置き換えます。

シーケンスのすべての2番目の値を特殊文字「*」に置き換えます。

ユーザーの入力を次のように考えてみましょう9。したがって、9までのフィボナッチ数列は次のようになります。 0,1,1,2,3,5,8,13,21

予想出力: 0,*,1,*,3,*,8,*,21

以下は、ロジックの実装に使用したコードです。

UserInput=9 
a=0 
b=1 

echo "The Fibonacci series is  : "

for (( i=0; i<UserInput; i++ )) 
do
    if [ $i -eq 2 ]
    then 
        echo -n "$a "
        sn=$((a + b)) 
        a=$b 
        b=$sn 
    fi 
done

ベストアンサー1

力ベースのawkソリューション(単純化のために仮定n>2):

awk -v n=9 'BEGIN{q=1; printf "0,*,"; for (i=2;i<n;i++) {s=q+r;r=q;q=s; printf "%s%s",i%2?"*":s,i==n-1?"\n":","}}'

ユーザー入力は変数に保存され、nコマンドラインパラメータを介して渡されます。awk-v n=number

次の場合にすぐに終了するにはn<3:

awk -v n=9 'BEGIN{if (n<3) exit; q=1; printf "0,*,"; for (i=2;i<n;i++) {s=q+r;r=q;q=s; printf "%s%s",i%2?"*":s,i==n-1?"\n":","}}'

説明する

awkはテキスト処理ツールであり、私たちはこれを「創造的に乱用」しています。したがって、すべてはBEGIN通常、最初の入力ファイルが処理される前に実行されるコードを含むブロック内で発生します。

構文自体はCと非常に似ているので

  • 系列の最初の2つの項を印刷します(家庭のために固定されていますn>2)。printf "0,*,"
  • ループ内の2最初の2つの合計の合計でn-1フィボナッチ数を計算し、合計を更新します。sqrqr
  • *偶数の場合は印刷し、偶数でない場合はi現在のフィボナッチ数列を印刷します()。si%2?"*":s
  • ,次に、ループの終わりに達したかどうかに応じてaまたは改行文字を印刷します(i==n-1)。

おすすめ記事