시퀀스의 모든 두 번째 값을 특수 문자 "*"로 바꿉니다.

시퀀스의 모든 두 번째 값을 특수 문자 "*"로 바꿉니다.

사용자의 입력을 다음과 같이 생각해보자 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와 매우 유사하므로

  • 계열의 처음 두 항을 인쇄합니다(가정 때문에 고정되어 있습니다 n>2).printf "0,*,"
  • 루프에서 2처음 두 합계의 합으로 n-1피보나치 수를 계산하고 합계 를 업데이트합니다 .sqrqr
  • *짝수이면 인쇄하고, 짝수가 아니면 i현재 피보나치 수열을 인쇄합니다( ).si%2?"*":s
  • ,그런 다음 루프의 끝에 도달했는지 여부에 따라 a 또는 개행 문자를 인쇄합니다 ( i==n-1).

답변2

Bash 및 산술 연산자를 사용하는 가장 가까운 코드는 다음과 같습니다.

#!/bin/bash
let UserInput=9 
let a=0 
let b=1
echo -n "The Fibonacci series is: 0"
for (( i=1; i<UserInput; i++ )) ; do
  let sn=a+b
  let a=b
  let b=sn
  if (( i % 2 == 0 )) ; then 
    echo -n ",$a"
  else
    echo -n ",*"
  fi 
done
echo

if명령문 에서는 %모듈로(나머지) 연산자를 사용해야 합니다. 이를 사용하면 i2로 나눌 수 있는지(예: 짝수) 테스트 하고 그에 따라 값을 인쇄 $a하거나 *.

출력은 다음과 같습니다:

The Fibonacci series is: 0,*,1,*,3,*,8,*,21

자체적으로 단계 수를 가져오도록 스크립트를 변경하세요.토론, 스크립트의 첫 번째 줄을 다음과 같이 수정하세요.

let UserInput="$1"

관련 정보