Хитрая задачка на 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 Source Code Highlighter.

Нужно заменой одного символа программы на любой другой сделать так, чтобы программа вывела 20 звездочек и завершилась. Форматирования нет потому, что пробелы и табуляция тоже символы. Добавлять и удалять символы нельзя. Существует три способа решения данной задачи. Задача считается решенной, когда найдены все три решения.

8 комментариев

  1. 123:

    Верное решение, спрятал в спойлер.

    Show »

    for(i = 0 ; i<n ; n−−)

    for(i = 0 ;−i<n ; i−−)

    for(i = 0 ; i+n ; i−−)

  2. Ъ:

    for(i =40 ; i<n ; i–)

    четвёртый что ли?

  3. 234:

    Второе решение – не согласен. Происходит добавление символа, а требуется замена.

  4. 234:

    То же сомое относится и 40

  5. 234:

    Упс, признаю, что был не прав, пробел – тоже символ. В первом посте все решения правельные
    А решение от «Ъ» – неверное.

  6. scatchman:

    я вот только начинаю разбирать С, первые два варианта я понял, а вот этот не очень.
    Рассуждения о верном решении, тоже спрятал в спойлер.

    Show »

    for(i = 0 ; i+n ; i–-)

    что это за условие? i+n , ааа, понял) int как boolean воспринимается в С, и 0 – это false, все остальное true, понятно))

  7. Murr:

    Что такое «символ программы» помним/понимаем?

    for(i = -2147483629 ; i < n ; i&minusж−) не понял, под символом программы понимается один символ исходного кода программы.
    Второе верное, спрятал.

    Show »

    for(i = 0 ; i + n ; i−−)

    for(i = 0 ; i < n ; i++) не решение, так как меняете 2 символа, два минуса на два плюса

    =====

    234: пробел – тоже символ
    —–
    Да. Только – текста, а не программы. :)

Leave a Reply