С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Проверка на присутствие числа в диапазоне:
Есть другие варианты?Код:between: ; B.C=high/low, A=value ld e,a ld a,b cp e ret c ld a,e cp c ret
Найдено в интернетах:
пишите решения.При устройстве на работу программистом столкнулся с интересной задачей следующего содержания:
«Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово Fizz, а вместо чисел, кратных пяти — слово Buzz. Если число кратно пятнадцати, то программа должна выводить слово FizzBuzz. Задача может показаться очевидной, но нужно получить наиболее простое и красивое решение.»
Код:var s0: string; begin for i:=1 to 100 do begin s0:=''; if (i mod 3) = 0 then s0:= 'Fizz'; if (i mod 5) = 0 then s0:= s0 + 'Buzz'; if s0 ='' then s0:= inttostr(i); writeln(s0); end;
Код:.org $8000 ld b,0 ld c,0 ld d,1 l1: ld e,0 inc b ld a,b cp 3 jr nz,j1 ld b,0 ld hl,str_fizz call print_strhl inc e j1: inc c ld a,c cp 5 jr nz,j2 ld c,0 ld hl,str_buzz call print_strhl inc e j2: ld a,e and a jr nz,j3 call print_strnum j3: ld a,32 rst 16;lf inc d ld a,d cp 101 jr nz,l1 ret str_fizz: .db 'fizz',0 str_buzz: .db 'buzz',0 print_strhl: push bc push de l2: ld a,(hl) and a jr z,q1 rst 16 inc hl jr l2 q1: pop de pop bc ret print_strnum: push bc push de ld c,d ld b,0 call 6683 pop de pop bc ret
сурово )
Задача действительно очевидная, а требование "простоты и красоты" переводит её в рубрику "угадай, что нравится автору". Быть может, требуется соблюдать определенные стандарты в оформлении кода?
Можно ли придумать что-либо проще и очевиднее, чем вариант от shurik-ua выше? Сомневаюсь. А именно понятность кода для коллег является одним из главных качеств программиста, которые хотят видеть работодатели.
По эффективности где-то можно оптимизировать. Скорость или, там, место в памяти. И это будет сильно зависеть от целевой архитектуры.
Скажем, если процессор не имеет аппаратного деления или, если деление медленное - то имеет право на жизнь такой вариант:
Но даже и здесь насчет эффективности можно поспорить, т.к. вывод на консоль почти на всех архитектурах (даже Z80) существенно медленнее, чем деление.Код:#include <stdio.h> void main(void) { int r3=1; int r5=1; for(int i=1; i<=100; i++) { if(r3==3) { r3=0; printf("Fizz"); } if(r5==5) { r5=0; printf("Buzz"); } if(r3 || r5) { printf("%d",i); } putchar('\n'); r3++; r5++; } }
шо касается деления, то:
у меня получилось 64 байта
те-же интернеты говорят
"в голову приходит идея использования строк. Например, с помощью строк можно избавиться от одной операции сравнения.
...
А что если попробовать не приписывать к строке нужный текст, а наоборот убирать текст из строки вида «ЧислоFizzBuzz»?
алгоритм содержит всего две операции сравнения и два условных оператора. "
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)