Помогите пожалуйста найти ошибку.Задача:определить ближайшее нечетное число меньше заданного числа N,которое делится на 4 с остатком 3.Программа работает,но получается не строго меньше N,как нужно по условию.
В цикле можно проверрять так : n%4!=3, второе - нет проверки на переход n в отрицательную область, ведь нужное нечётное число можно и не найти, третье - зачем лишняя операция n=n, если можно было просто проверить число на нечётность n%2!=0 или так n & 1.
Не знаю, объявится ли здесь автор поста, но... задача интересна на мой взгляд. Решается она в одну строку кода. Если кому интересно, изложу решение:
1. условие немного вводит в заблуждение словами "ближайшее нечетное число", на самом деле, чётное число при делении на 4 ни когда не даст остаток 3, поэтому чётность можно и не проверять.
2. деление на 4 - это сдвиг числа вправо на 2 разряда, выпадающие разряды - это остаток от деления. Понятно, что остаток будет равен 3м при 2х единицах в младших разрядах числа;
3. Осталось найти ближайшее меньшее число с двумя младшими единицами. Для этого нужно уменьшить входное число на величину от 1 до 4 (4 - это если входное число само делится на 4 с остатком 3, но в условии сказано "ближайшее меньшее"). Определить, сколько нужно вычесть можно так: (n & 3)+1. n & 3 выделяет 2 младших разряда числа (от 0 до 3х в десятичной системе, а "+1" корректирует результат.
4. ИТОГО решение: результат= n - ((n &3)+1), где n - это входное число, которое не должно быть меньше 4.
То есть, ни каких циклов и всего одно условие.
Помогите.Не могу разобраться,почему программа не считает.Задача.дана символьная строка.заменить все четные символы "!" точками вывести полученную строку.