Сценарий принимает только один аргумент (назовите его n
). Затем он поочередно добавляет и вычитает каждую цифру чисел от 1 до n
.Bash script - головоломка
Например:
n = 12
1 - 2 + 3 - 4 + 5 - 6 + 7 - 8 + 9 - 1 + 0 - 1 + 1 - 1 + 2
выходной : 5
#!/bin/bash
number=$1
result=1
if ((number == 1 || number == 0)); then
echo
echo number: $number
echo
else
for ((i = 1; i < number; i++)); do
if ((i < 10)); then
if ((i % 2 == 0)); then
let "result = result + i + 1"
else
let "result = result - i - 1"
fi
else
for ((i = 10; i <= number; i++)); do
if ((i < 100 && i >= 10)); then
let "result = result - i/10 + i%10"
else
let "result = result - i/100 + (i%100)/10 - (i/100)%10"
fi
done
fi
done
echo
echo result: $result
echo number: $number
echo
fi
он отлично работает для целых чисел от 0 до 9, но при п> 9 дает неправильный ответ.
Пожалуйста, исправьте мой сценарий и объясните мне, почему он ведет себя так.
PS Я новичок в Баш сценариев, так что я хотел бы видеть другое решение этой головоломки
PPS я знаком с Java
EDIT
Я установил код, и теперь он работает правильно
#!/bin/bash
number=$1
result=1
if ((number == 1 || number == 0)); then
echo
echo number: $number
echo
else
for ((i = 1; i < number; i++)); do
if ((i < 9)); then
if ((i % 2 == 0)); then
let "result = result + i + 1"
else
let "result = result - i - 1"
fi
fi
done
for ((i = 10; i <= number; i++)); do
if ((i < 100)); then
let "result = result - i/10 + i%10"
else
if ((i % 2 == 0)); then
let "result = result - i/100 + (i%100)/10 - (i%100)%10"
else
let "result = result + i/100 - (i%100)/10 + (i%100)%10"
fi
fi
done
echo
echo result: $result
echo number: $number
echo
fi
Это делает то, что вы хотите? Какое предпочтение оператора вы ожидаете здесь? 'result = result - i - 1' –
Вы должны использовать' i <= number' ..., что означает, что скрипт фактически не ведет себя правильно по правильной причине для '0' через' 9'. –
@KyleStrand да, это правда для ints> = 9, я отредактирую код – Sensei