| Задачка |
[Mar. 17th, 2007|01:49 pm] |
Для тех, кто знаком с языком C. Рассказал мне однокурсник, так что, возможно, боян. Есть код:
#include <stdio.h>
void main (void)
{
int i, N=20;
for ( i = 0 ; i < N ; i-- )
printf ("*");
}
Придумать три способа изменить в нем один символ так, чтобы программа выводила 20 звездочек. Символы можно только заменять: удалять и добавлять нельзя. Два решения так себе, а третье - клевое, я как нашел - так мне эта задача понравилась. |
|
|
| Comments: |
Пробел - это символ? (Выходит, что да, иначе зачем N=20 и i = 0 написаны неодинаково ;-)) Если нет, то у меня только два решения...
| From: | (Anonymous) |
| Date: | March 17th, 2007 - 01:30 pm |
|---|
| | не работает! | (Link) |
|
в данном виде прога заполняет экран туевой хучей звёздочек. i++ надо.
Спасибо, а пост почитать не пробовали :)?
Ой, четвертый способ нарисовался :)
В первом способе ошибка: должно быть & вместо ^. Причем точное количество напечатанных звездочек в этом варианте будет зависеть от архитектуры (способа представления отрицательных чисел).
Стоп. i & N вывалится на первой же итерации, там же i = 0; Но я когда его придумывал просто написал i + N
Да, с побитовыми операциями не получается.
1. i + N имелось в виду? 3. Это как? %)
1) см. ветку обсуждения. 3) из переменной i вычесть -1.
i--1 - это компилится? У меня вот нет... Хотя согласен, идея здравая.
Мне негде проверить. Но, вроде, ничего незаконного в этой записи быть не должно - унарный минус имеет высокий приоритет, а скобки в выражениях факультативны.
Попробовал на gcc - не компилится. | |