Язык не указан, Default-Language это C. На нём и напишу. 1. #include <stdio.h> int main() { int n; scanf("%d", &n); if (n % 10 == 4 || n % 10 == 7 || n / 10 == 4 || n / 10 == 7) printf("YES\n"); else printf("NO\n"); return 0; } Для порядку скажу что на Perl это можно реализовать проще. #!perl %h { 4 => 0, 7 => 0}; <>; if (exists $h{$_%10} || exists $h{$_/10}) { print "YES\n"; else { print "NO\n"; } Но мы ушли от темы. Итак, 2. Тут всё ещё проще: #include <stdio.h> int main() { int n; scanf("%d", &n); if (!(n % 3)) printf("Multiple of 3\n"); else printf("Not multiple of 3\n"); if (n % 10 == 3) printf("Ends by 3\n"); else printf("Not ends by 3\n"); return 0; } Тут более простой реализации на другом известном мне языке нету, так что приводить дополнительно ничего не буду.
Сначала надо избавиться от ошибок (пункт №3) иначе не сможем выполнить 1 и 2 пункт задания. Исправляем if N mod 10 k:=N mod 10; на if (N mod 10 < k) then k:=N mod 10; Исправляем N:N div 10; на N:= N div 10;
После исправления ошибок при вводе 537 получим 3 Программа будет работать правильно для любого числа, у которого вторая цифра слева меньше первой цифры, например: 7193
Чтобы программа работала правильно для всех чисел надо изменить это: while N > 10 do на while N > 0 do
После всех исправлений код программы стал таким: var N, k: integer; begin readln(N); k := 9; while N > 10 do begin if (N mod 10 < k) then k := N mod 10; N := N div 10; end; write(k) end.
1) 4<<2 = 4*2*2=16 (сдвиг влево на каждый разряд удваивает число)
2) 9>>2 = 2 (сдвиг вправо на каждый разряд уменьшает число вдвое, остаток теряется)
3) 2+1 = 3
4) 16 * 3 = 48
Итого, три пары скобок