|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2014, 23:03 | #1 |
Регистрация: 26.03.2014
Сообщений: 3
|
Хитрая задачка
есть код:
int i,n=10; for(i=0;i<n;i--) printf("$"); Нужно заменить один символ (не удалить, не добавить, а именно заменить) чтобы $ вывелся 10 раз. Есть три разных способа. Самый очевидный: заменить i-- на n--. А еще два способа - уже голову сломал. |
19.12.2014, 05:47 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Точно там в символах идёт? А то может замена на i++ тоже подойдёт, типа замена одной операции, но вот два символа. Именно, что с символом что-то ничего в голову не идёт.
|
19.12.2014, 12:15 | #3 |
Регистрация: 26.03.2014
Сообщений: 3
|
|
22.12.2014, 19:21 | #4 |
Участник клуба
Регистрация: 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("$"); => нельзя поменять ничего, кроме печатаемого символа Добавился вариант Код:
Теперь логический подход. Надо поменять или инициализацию, или условие, или тело цикла. 1) Инициализацию менять смысла нет, так как из сравнения в условии и декремента следует, что цикл или не выполняется совсем, или приводит к UB. 2) Условие надо поменять так, чтобы оно было ложно для i == -10 (менять i на что-то другое смысла нет). Только "+" вместо "<" подходит. 3) Изменение тела цикла (в широком смысле - включая "i--"). Вариант с заменой i на n найден. Иначе при данных инициализации и условии единственный вариант - инкремент i - не подходит. А, ещё теоретически 4) Изменение структуры программы, чтобы вообще она не содержала какой-то части (изменение скобок, точек с запятыми...) - не подходит для данного случая. Последний раз редактировалось Somebody; 22.12.2014 в 19:42. |
14.05.2015, 20:20 | #5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Попалась тут мне почти такая же задачка - стал думать. Наверное, в задаче пробелы были - тогда легко:
Код:
|
14.05.2015, 20:32 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
И с мнением Пучкова я согласен -- и ++ это уже два символа.
I'm learning to live...
|
|
14.05.2015, 20:41 | #7 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
В задаче, которую написал ТС, это добавление. Но если в задаче на самом деле были пробелы, то это как раз замена одного символа - пробел меняется на минус.
Учитывая, что я только что нашёл почти такую же задачку, там были пробелы, требовалось 3 варианта решения, и эти 3 варианта успешно прошли тесты, думаю, что так оно и было. Тем более что, как я двумя способами доказывал ранее, задача без пробелов в коде третьего решения не имеет. |
14.05.2015, 20:58 | #8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Если честно у меня складывается впечатление, что ТС перепутал понятие символа и оператора. Не исключено что всетки речь идет о одном операторе.
I'm learning to live...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хитрая нумерация строк | 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 |