задачка для программистов
Sep. 3rd, 2006 12:50 pmЭта запись заинтересует только программистов, знающих язык C :)
Отличная задачка от
yms, для разминки мозгов. Дан текст программы на C. Требуется найти три способа изменить в нем один символ (не добавить, не убрать, не переставить - изменить один символ), так, чтобы программа стала печатать 20 звездочек.
Программа:
main()
{
int i, N=20;
for(i = 0 ; i < N ; i--)
printf("*");
}
В течение нескольких часов буду скрывать правильные ответы, потом все открою.
Update: несколько человек предложили один возможный ответ, причем правильно. Но один ответ найти относительно легко. Постарайтесь найти три разных.
Update: первым правильный ответ написал
shigin, но он знал эту задачу раньше. Первым нашел все три ответа сейчас
feuerbach и почти одновременно с ним
squadette. Я не открываю правильные ответы еще несколько часов, потом открою.
Update: Все, раскрываю все комментарии, и перестаю отвечать, верно или нет, проверьте себя сами по комментариям - правильные ответы есть в них в изобилии (поэтому не заглядывайте туда, если хотите сами решить). Очень многие нашли три правильных ответа; предлагались также другие варианты, но все они по тем или иным причинам не работают, правильных ответа есть только три, насколько известно.
no subject
Date: 2006-09-03 09:57 am (UTC)no subject
Date: 2006-09-03 10:03 am (UTC)no subject
Date: 2006-09-03 10:01 am (UTC)no subject
Date: 2006-09-03 10:03 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2006-09-03 10:02 am (UTC)no subject
Date: 2006-09-03 10:05 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2006-09-03 10:02 am (UTC)no subject
Date: 2006-09-03 10:02 am (UTC)no subject
Date: 2006-09-03 10:04 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2006-09-03 10:03 am (UTC)no subject
Date: 2006-09-03 10:04 am (UTC)(no subject)
From:no subject
Date: 2006-09-03 10:05 am (UTC)no subject
Date: 2006-09-03 10:06 am (UTC)no subject
Date: 2006-09-03 10:06 am (UTC)?
no subject
Date: 2006-09-03 10:08 am (UTC)no subject
Date: 2006-09-03 10:08 am (UTC)1, easy: for(i = 0 ; i < N ; N--)
2, nice: (i = 0 ; i + N ; i--)
3, no can do yet, will work on it.
no subject
Date: 2006-09-04 07:53 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2006-09-03 10:11 am (UTC)2. i + N
3. N--
Старая задача, в свое время долго ее решал, а третий вариант нашел только месяца через 3, посмотрев на все это еще раз.
no subject
Date: 2006-09-03 10:13 am (UTC)main() { int i, N=20; for(i = 0 ;-i < N ; i--) printf("*"); }2. Заменяем '<' на '+':
main() { int i, N=20; for(i = 0 ; i + N ; i--) printf("*"); }3. Заменяем 'i' на 'N':
main() { int i, N=20; for(i = 0 ; i < N ; N--) printf("*"); }no subject
Date: 2006-09-03 10:21 am (UTC)no subject
Date: 2006-09-03 10:13 am (UTC)no subject
Date: 2006-09-03 10:15 am (UTC)вместо i < N
yay
no subject
Date: 2006-09-03 10:20 am (UTC)no subject
Date: 2006-09-03 10:16 am (UTC)no subject
Date: 2006-09-03 10:16 am (UTC)main() { int i, N=20; for(i = 0 ;-i < N ; i--) printf("*"); }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
main() { int i, N=20; for(i = 0 ; i < N ; N--) printf("*"); }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
main() { int i, N=20; for(i =40 ; i < N ; i--) printf("*"); }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
no subject
Date: 2006-09-03 10:20 am (UTC)no subject
Date: 2006-09-03 10:17 am (UTC)N--
no subject
Date: 2006-09-03 10:18 am (UTC)no subject
Date: 2006-09-03 10:20 am (UTC)no subject
Date: 2006-09-03 10:22 am (UTC)no subject
Date: 2006-09-03 10:22 am (UTC)2. i < N на i + N
3. i < N на -i < N
no subject
Date: 2006-09-03 10:24 am (UTC)no subject
Date: 2006-09-03 10:25 am (UTC)2. i-- -> N--
3. Пока не нашел
no subject
Date: 2006-09-03 10:26 am (UTC){
int i, N=20;
for(i = 0 ; i < N ; N--)
printf("*");
}
main()
{
int i, N=20;
for(i = 0 ; i + N ; i--)
printf("*");
}
main()
{
int i, N=20;
for(i = 0 ;-i < N ; i--)
printf("*");
}
no subject
Date: 2006-09-03 01:46 pm (UTC)no subject
Date: 2006-09-03 10:27 am (UTC)2. for(i = 0 ; i + N ; i--)
3. for(i = 0 ;-i < N ; i--) /* меняем символ пробела перед i на - */
no subject
Date: 2006-09-03 01:46 pm (UTC)no subject
Date: 2006-09-03 10:29 am (UTC)i+N
-i<N
no subject
Date: 2006-09-03 01:47 pm (UTC)