Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2014, 23:03   #1
dmalsh
 
Регистрация: 26.03.2014
Сообщений: 3
По умолчанию Хитрая задачка

есть код:
int i,n=10;
for(i=0;i<n;i--)
printf("$");

Нужно заменить один символ (не удалить, не добавить, а именно заменить) чтобы $ вывелся 10 раз. Есть три разных способа.

Самый очевидный: заменить i-- на n--.
А еще два способа - уже голову сломал.
dmalsh вне форума Ответить с цитированием
Старый 19.12.2014, 05:47   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Точно там в символах идёт? А то может замена на i++ тоже подойдёт, типа замена одной операции, но вот два символа. Именно, что с символом что-то ничего в голову не идёт.
pu4koff вне форума Ответить с цитированием
Старый 19.12.2014, 12:15   #3
dmalsh
 
Регистрация: 26.03.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Точно там в символах идёт? А то может замена на i++ тоже подойдёт, типа замена одной операции, но вот два символа. Именно, что с символом что-то ничего в голову не идёт.
В том то и дело, что это уже два символа.
dmalsh вне форума Ответить с цитированием
Старый 22.12.2014, 19:21   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Используем научный подход aka полный перебор.
int i,n= => нельзя ничего поменять
10 => 1 можно поменять на [02-9!~.+-], 0 - на [1-9.lLuU] => толку нет
; for(i= => нельзя ничего поменять (без UB)
0 => на [1-9n] => толку нет
; => нельзя
i => [0-9n] => толку нет
< => [-+*/%&^|=,] => (!)
n => [0-9i]
; => нельзя
i => n => (!)
- => нельзя
- => [in0-9] => толку нет
) printf("$"); => нельзя поменять ничего, кроме печатаемого символа
Добавился вариант
Код:
for(i=0;i+n;i--)
Третьего не вижу. Если только пропустил что-то...
Теперь логический подход. Надо поменять или инициализацию, или условие, или тело цикла.
1) Инициализацию менять смысла нет, так как из сравнения в условии и декремента следует, что цикл или не выполняется совсем, или приводит к UB.
2) Условие надо поменять так, чтобы оно было ложно для i == -10 (менять i на что-то другое смысла нет). Только "+" вместо "<" подходит.
3) Изменение тела цикла (в широком смысле - включая "i--"). Вариант с заменой i на n найден. Иначе при данных инициализации и условии единственный вариант - инкремент i - не подходит.
А, ещё теоретически 4) Изменение структуры программы, чтобы вообще она не содержала какой-то части (изменение скобок, точек с запятыми...) - не подходит для данного случая.

Последний раз редактировалось Somebody; 22.12.2014 в 19:42.
Somebody вне форума Ответить с цитированием
Старый 14.05.2015, 20:20   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Попалась тут мне почти такая же задачка - стал думать. Наверное, в задаче пробелы были - тогда легко:
Код:
for (i = 0;-i < n; i--)
Somebody вне форума Ответить с цитированием
Старый 14.05.2015, 20:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for (i = 0;-i < n; i--)
Но эт не замена. Это добавление.
И с мнением Пучкова я согласен -- и ++ это уже два символа.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2015, 20:41   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Но эт не замена. Это добавление.
В задаче, которую написал ТС, это добавление. Но если в задаче на самом деле были пробелы, то это как раз замена одного символа - пробел меняется на минус.
Учитывая, что я только что нашёл почти такую же задачку, там были пробелы, требовалось 3 варианта решения, и эти 3 варианта успешно прошли тесты, думаю, что так оно и было. Тем более что, как я двумя способами доказывал ранее, задача без пробелов в коде третьего решения не имеет.
Somebody вне форума Ответить с цитированием
Старый 14.05.2015, 20:58   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если честно у меня складывается впечатление, что ТС перепутал понятие символа и оператора. Не исключено что всетки речь идет о одном операторе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хитрая нумерация строк Proton-x Microsoft Office Excel 3 14.02.2011 16:09
Хитрая задача old slon Помощь студентам 4 13.05.2009 23:49
Хитрая задача Marsik Помощь студентам 11 21.11.2007 18:34