Хитрая задачка на C
Однажды довелось мне решить задачку. Для хорошо знакомого с C человека проблем не вызывает, а вот начинающие, еще не постигшие прелестей этого языка программисты спотыкаются. Мне она очень понравилась.
Дан код:
#include <stdio.h>
int main(void)
{
int i, n=20;
for(i = 0 ; i<n ; i--)
printf("*");
return 0;
}* This source code was highlighted with .
Нужно заменой одного символа программы на любой другой сделать так, чтобы программа вывела 20 звездочек и завершилась. Форматирования нет потому, что пробелы и табуляция тоже символы. Добавлять и удалять символы нельзя. Существует три способа решения данной задачи. Задача считается решенной, когда найдены все три решения.


Верное решение, спрятал в спойлер.
Show »
for(i = 0 ; i<n ; n−−)
for(i = 0 ;−i<n ; i−−)
for(i = 0 ; i+n ; i−−)
for(i =40 ; i<n ; i–)
четвёртый что ли?
У Вас цикл не запуститься, так как 40>20.
Второе решение – не согласен. Происходит добавление символа, а требуется замена.
То же сомое относится и 40
Упс, признаю, что был не прав, пробел – тоже символ. В первом посте все решения правельные
А решение от «Ъ» – неверное.
я вот только начинаю разбирать С, первые два варианта я понял, а вот этот не очень.
Рассуждения о верном решении, тоже спрятал в спойлер.
Show »
for(i = 0 ; i+n ; i–-)
что это за условие? i+n , ааа, понял) int как boolean воспринимается в С, и 0 – это false, все остальное true, понятно))
Что такое «символ программы» помним/понимаем?
for(i = -2147483629 ; i < n ; i&minusж−) не понял, под символом программы понимается один символ исходного кода программы.
Второе верное, спрятал.
Show »
for(i = 0 ; i + n ; i−−)
for(i = 0 ; i < n ; i++) не решение, так как меняете 2 символа, два минуса на два плюса
=====
234: пробел – тоже символ
—–
Да. Только – текста, а не программы.