Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизТоже пятничная задачка :о) Найти похожие ветки
← →
Юрий Зотов © (2007-05-04 14:51) [0]Написать программу, которая читает со стандартного ввода целые числа, а затем четные из них пишет в обратном порядке в стандартный вывод.
Задачка, конечно, элементарная. Фишка состоит не в ней самой, а в том, чтобы написать программу, максимально короткую и в то же время максимально понятную.
Писать можно на любом языке.
← →
Rouse_ © (2007-05-04 14:54) [1]Стандартный stdin-sdtout, СОМ или что именно?
← →
Юрий Зотов © (2007-05-04 14:55) [2]stdin-stdout
← →
Rouse_ © (2007-05-04 14:56) [3]Рамер данных определяется заранее, или вывод данных производится по пинку?
← →
Юрий Зотов © (2007-05-04 15:01) [4]Как угодно.
← →
MBo © (2007-05-04 15:17) [5]может, какой хитрый прием имеется в виду?
А то с использованием *** пара минут потребовалась...
← →
Юрий Зотов © (2007-05-04 15:20) [6]Так она за пару минут и пишется. Просто интересно, кто выдаст самый короткий и одновременно самый понятный вариант, подобрав для этого самый подходящий инструмент (язык).
← →
Romkin © (2007-05-04 15:47) [7]
program Project1;
{$APPTYPE CONSOLE}
procedure PrintEven;
var
A: integer;
begin
repeat
readln(A);
until ((A and 1) = 0);
if A <> 26 then
PrintEven;
writeln(A);
end;
begin
PrintEven;
end.
← →
Romkin © (2007-05-04 15:50) [8]А нафига?
← →
Юрий Зотов © (2007-05-04 16:02) [9]> Romkin © (04.05.07 15:50) [8]
Хитрый ход, но не понял проверки на 26.
А на фига? Как и все задачки - кто-то мозги разомнет, кто-то поупражняется, кто-то поучится...
← →
Юрий Зотов © (2007-05-04 16:05) [10]> не понял проверки на 26.
Если имелось в виду ^Z, то проверка должна быть другой.
← →
Romkin © (2007-05-04 16:09) [11]А чем не нравится проверка? Бодун у меня, поэтому и 26...
Кто Штирлиц - пусть поменяет на 44
Условиям задачи удовлетворяет :-Р
← →
umbra © (2007-05-04 16:25) [12]не на паскале :)
#!/usr/bin/perl -w
use strict;
my $line;
my @data;
while ($line = <STDIN>) {
chomp $line;
if (!($line =~ /\D/) and $line) {
if ($line % 2 == 0) {
unshift @data, $line;
}
}
}
print "\n\n\n";
foreach my $number (@data) {
print $number."\n";
}
← →
clickmaker © (2007-05-04 16:29) [13]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
char strDigits[512];
gets(strDigits);
char* token = strDigits + strlen(strDigits);
while (token != strDigits)
{
if (*token == " ")
{
int digit = atoi(token);
if ((digit % 2) == 0)
printf("%d ", digit);
*token = 0;
}
token--;
}
}
← →
McSimm_ © (2007-05-04 16:43) [14]@_=(<>);
while ($a = pop @_ ) { print $a unless ($a % 2) }
Наверняка можно короче, подзабыл уже.
← →
Romkin © (2007-05-04 16:56) [15]clickmaker © (04.05.07 16:29) [13] И опять, млин, дыра переполнения буфера :(
← →
umbra © (2007-05-04 16:59) [16]2 McSimm_ © (04.05.07 16:43) [14]
будет печатать в обратном порядке все строки (не числа) и четные числа
← →
clickmaker © (2007-05-04 17:11) [17]
> [15] Romkin © (04.05.07 16:56)
я в 2003 студии писал. В 2005 заюзал бы gets_s
← →
McSimm_ © (2007-05-04 17:14) [18]
> будет печатать в обратном порядке все строки (не числа)
> и четные числа
Именно так.
В условии не написано, что программа читает строки и выбирает из них числа :)
Вот еще похожий пример.
<?php array_walk(array_reverse(file("php://STDIN")), create_function("$a","print ($a%2?"":$a);")); ?>
← →
clickmaker © (2007-05-04 17:16) [19]впрочем, можно fgets(strDigits, sizeof(strDigits), stdin);
← →
McSimm_ © (2007-05-04 17:17) [20][14] все же больше удовлетворяет условиям понятности, на мой взгляд :)
← →
McSimm_ © (2007-05-04 17:21) [21]
> umbra © (04.05.07 16:25) [12]
> if (!($line =~ /\D/) and $line) {
Проверка не соответсвует множеству целых чисел :)
← →
begin...end © (2007-05-04 18:13) [22]var
N: Integer;
begin
with TStack.Create do
try
repeat
ReadLn(N);
if not Odd(N) then Push(Pointer(N))
until N = -1;
while Count <> 0 do
WriteLn(Integer(Pop));
ReadLn
finally
Free
end
end.
← →
Суслик © (2007-05-04 18:18) [23]хи-хи
юра не может задачу решить?! а мы решай?! :-0
← →
umbra © (2007-05-04 18:22) [24]да, забыл об отрицательных числах :( Вот как надо:
#!/usr/bin/perl -w
use strict;
my $line;
my @data;
while ($line = <STDIN>) {
chomp $line;
if ($line =~ /^-?\d*/ && $line % 2 == 0) {
unshift @data, $line;
}
}
print "\n\n\n";
foreach my $number (@data) {
print $number."\n";
}
← →
McSimm_ © (2007-05-04 18:28) [25]
> да, забыл об отрицательных числах
И нуле (в первом варианте)
← →
default © (2007-05-04 18:28) [26]да наиболее очевидный это вставлять чётные числа в динамический список методом Insert(0, NewEvenNumber) и потом вывод в цикле
← →
Rouse_ © (2007-05-04 18:55) [27]http://rouse.drkb.ru/yz_test.zip
Там бинарник и исходник. Меньше некуда - все по условиям задачи :)
← →
McSimm_ © (2007-05-04 19:04) [28]
> Rouse_ © (04.05.07 18:55) [27]
Программа на 120 строк, это меньше некуда? :)
← →
Rouse_ © (2007-05-04 19:25) [29]
> Программа на 120 строк, это меньше некуда? :)
Эээ... а при чем тут строки? Я ориентировался на размер скомпиленого кода :) Разве не это нужно было?
← →
Rouse_ © (2007-05-04 19:27) [30]Да и кода там реально 38 асмовских строк :) Если считать только код с джампами :)
← →
Внук © (2007-05-04 19:54) [31]Задачка, разумеется, есть стандартная иллюстрация к теме "рекурсия". Либо к теме "стек". А уж кто как извратится, это от степени испорченности зависит :)
← →
default © (2007-05-04 19:57) [32]рекурсия тут совсем ни к месту
keep it simple, stupid
а если брать стек и подобное, то уж лучше Insert в 0 позицию, что поймёт всяк и каждый
← →
Alx2 © (2007-05-04 20:03) [33]>рекурсия тут совсем ни к месту
>а если брать стек и подобное,
Рекурсия ни к месту, а стек - к месту. А рекурсивный стек (стек вызовов) - к месту или ни к месту?
← →
default © (2007-05-04 20:05) [34]Alx2 © (04.05.07 20:03) [33]
разговор совсем не про то...я знаю что рекурсия через стек реализуется...о боже...буквоедство очередное...речь о простоте кода и краткости...
← →
Внук © (2007-05-04 20:05) [35]>>default © (04.05.07 19:57) [32]
Как не к месту она, например, при вычислении факториала. Тем не менее, классические учебные задачи.
← →
Alx2 © (2007-05-04 20:06) [36]>default © (04.05.07 20:05)
Я и не сомневаюсь, что знаешь. Только не возьму в толк чего здесь в рекурсии туманного супротив явного стека?
← →
Alx2 © (2007-05-04 20:08) [37]>Внук © (04.05.07 20:05)
Да, в факториале не к месту - там не надо хранить се значения.
А здесь не вижу разницы
← →
default © (2007-05-04 20:12) [38]Alx2 © (04.05.07 20:06) [36]
просто когда пишешь код полезно предполагать о том, что его будут читать люди достаточно низкой квалификация
это маленькая хитрость заставляющая писать как можно более простой код
в конечном итоге этим самым "низкоквалицифированным" можешь оказать ты сам просматривающий код, например, для целей сопровождения который уже ничерта об этом коде уже не помнит
рекурсия тут проста, но многие люди не очень её понимают, что может вызвать замешательстов даже в таком простом случае рекурсии
Внук © (04.05.07 20:05) [35]
я не отрицаю рекурсию в общем случае:)
я к тому что если можно написать нерекурсивный код не меньшей понятности и краткости чем рекурсивный вариант, то лучше именно его и написать
← →
Внук © (2007-05-04 20:12) [39]>>Alx2 © (04.05.07 20:08) [37]
Я вообще не вижу разницы :) Это лишь вопрос того, где кушать память - в массиве, списке или стеке вызовов. Думается, кратчайший по количеству строк кода вариант будет при рекурсии.
← →
default © (2007-05-04 20:15) [40]Внук © (04.05.07 20:12) [39]
многие бы за вычисление факториала через рекурсию сняли бы с собеседования враз...
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.06 c