Вам дан набор чисел, найдите сумму всех положительных чисел в нем.
Входные данные
В первой строке записано количество чисел N (0 <= N <= 1000).
Затем следует N целых чисел, по модулю не превосходящих 1000.
Выходные данные
Выведите единственное целое число -- сумму положительных чисел из данного набора.
Ввод: stdin
Вывод: stdout
При подсчете размера исходника не учитываются символы с кодом <= 32.
Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.
Здравствуйте, Сергей, Вы писали:
С>Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.
basic, 72 байта
1 input n%
2 for i%=1 to n%
3 input v%
4 s%=s%+v%
5 next
6 ? s%
К>#define R (scanf("%d",&t),t>0?t:0)
К>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>
К>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
Здесь 83 символа.
Пробелы не считаются. Но, я так понял. это на С (не С++)?
Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет).
А прога на сервер для проверки загружается через HTML-форму, так что в какой файл там исходник сохраняют, никто не знает.
А у меня так:
int n, s, p, *o = "%d";
main ()
{
for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
printf (o, s);
}
Здравствуйте, Сергей, Вы писали:
С>Здравствуйте, Кодт, Вы писали:
К>>K&R Си К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>
К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF). С>Здесь 83 символа. С>Пробелы не считаются. Но, я так понял. это на С (не С++)? С>Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет). С>А прога на сервер для проверки загружается через HTML-форму, так что в какой файл там исходник сохраняют, никто не знает. С>А у меня так: С>
С>int n, s, p, *o = "%d";
С>main ()
С>{
С> for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
С> printf (o, s);
С>}
С>
Здравствуйте, WinterMute, Вы писали:
WM>Здравствуйте, Кодт, Вы писали:
К>>K&R Си К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>
К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
WM>Можно переписать на "OlimpiadaC". "OlimpiadaC" это обычный "C" у которого переопределены ключевые слова и названия библиотечных функций:
WM>for -- fr WM>#define -- #def WM>main() -- mn() WM>scanf() -- sf() WM>printf() -- pf()
WM>Получается 74 символа.
Это конечно можно. Но сами переопределения тоже символы занимают!
Здравствуйте, Константин, Вы писали:
К>P.S. сейчас появятся знатоки perl и пойдёт вечеринка
perl не perl, но 16 символов.
+/{x|0}0$1 _0:""
Re: Size-contest
От:
Аноним
Дата:
23.06.05 11:31
Оценка:
Здравствуйте, Сергей, Вы писали:
С>Здравствуйте. С>Осмелюсь предложить такую задачу:
С>
С>Вам дан набор чисел, найдите сумму всех положительных чисел в нем.
С>Входные данные
С>В первой строке записано количество чисел N (0 <= N <= 1000).
С>Затем следует N целых чисел, по модулю не превосходящих 1000.
С>Выходные данные
С>Выведите единственное целое число -- сумму положительных чисел из данного набора.
С>Ввод: stdin
С>Вывод: stdout
С>
С>При подсчете размера исходника не учитываются символы с кодом <= 32.
С>Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.
Не против если я эту задачу выложу на сфере? Там куча языков — будет где развернуться =)
Здравствуйте, Сергей, Вы писали:
С>Здравствуйте, Кодт, Вы писали:
К>>K&R Си К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>
К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF). С>Здесь 83 символа. С>Пробелы не считаются. Но, я так понял. это на С (не С++)?
Некошерно не считать ОБЯЗАТЕЛЬНЫЕ пробелы и переводы строки.
Разумеется, это не С++, а С (я даже не уверен, соответствует ли он С90).
С>Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет).
Многие компиляторы поддерживают и С++, и С — различают языки по расширению файла или по опции в командной строке.
С>А у меня так:
С>int n, s, p, *o = "%d";
С>main ()
С>{
С> for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
С> printf (o, s);
С>}
С>>При подсчете размера исходника не учитываются символы с кодом <= 32.
DK>Надо писать на whitespace
Читаем N:
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][LF][Tab][Tab] - прочитать число в 0ю ячейку памяти
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][Tab][Tab] - из 0й ячейки на стек.
[Space][Space][Space][Space][LF] - 0 на стек
--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[LF][Tab][Space][Space][Space][LF] - метка [Space][Space].
[Space][Tab][Space][Space][Tab][LF] - Скопировали число итераций на верхушку стека.
[LF][Tab][Space][Space][LF] - Если 0, то перейти к метке [Space].
Читаем A[i]:
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][LF][Tab][Tab] - прочитать число в 0ю ячейку памяти
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][Tab][Tab] - из 0й ячейки на стек.
[Space][LF][Space] - Дублируем его
[LF][Tab][Tab][Tab][LF] - Переход к метке [Tab] если число отрицательно.
[Tab][Space][Space][Space] - сложили верхние числа на стеке
[Space][LF][Space] - Дублируем результат
[LF][Space][Space][Tab][LF] - Метка [Tab]
[Space][LF][LF] - выкинули верхний элемент стека (отрицательное число или дублированный результат).
--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[Space][LF][Tab] - Swap stack
[Space][Space][Space][Tab][LF] - 1 на стек
[Tab][Space][Space][Tab] - вычитание
[Space][LF][Tab] - Swap stack
--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[LF][Space][LF][Space][Space][LF] - Переход к метке [Space] [Space] .
[Tab][LF][Space][Tab] - вывести число на стеке
[LF][LF][LF] - Закончить
8*3 + 4*4 + 9*5 + 3*6 = 103 символа, из них непробельных — 0.
... << RSDN@Work 1.1.3 stable >>
Clannad — Robin (the hooded man)
Standarts are great, everyone should have one!