Исполнитель робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. между соседними (по сторонам) клетками может стоять стена, через которую робот пройти не может. у робота есть девять команд. четыре команды — это команды-приказы: вверх вниз влево вправопри выполнении любой из этих команд робот перемещается на одну клетку соответственно: вверх ↑ вниз ↓, влево ← , вправо →. если робот получит команду передвижения сквозь стену, то он разрушится. также у робота есть команда закрасить, при которой закрашивается клетка, в которой робот находится в настоящий момент.ещё четыре команды — это команды проверки условий. эти команды проверяют, свободен ли путь для робота в каждом из четырёх возможных направлений: сверху свободно снизу свободно слева свободно справа свободноэти команды можно использовать вместе с условием «если», имеющим следующий вид: если условие топоследовательность командвсездесь условие — одна из команд проверки условия. последовательность команд — это одна или несколько любых команд-приказов. например, для передвижения на одну клетку вправо, если справа нет стенки, и закрашивания клетки можно использовать такой алгоритм: если справа свободно товправозакраситьвсев одном условии можно использовать несколько команд проверки условий, применяя логические связки и, или, не, например: если (справа свободно) и (не снизу свободно) товправовседля повторения последовательности команд можно использовать цикл «пока», имеющий следующий вид: нц пока командкцнапример, для движения вправо, пока это возможно, можно использовать следующий алгоритм: нц пока справа свободновправокцрешение
// Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):integer;
// Перевод из системы по основанию k в десятичную
begin
var s:='0123456789ABCDEF';
Result:=0;
var pa:=1;
for var i:=Length(n) downto 1 do begin
Result+=pa*(Pos(n[i],s)-1);
pa*=k
end
end;
function DecToa(n,k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
Result:='';
while n>0 do begin
var r:=n mod k;
if r<10 then Result:=r+Result
else Result:=Chr(Ord('A')+r-9)+Result;
n:=n div k
end
end;
function AtoB(s:string;A,B:integer):string;
// Перевод из системы по основанию A в систему по основанию B
begin
Result:=DecToa(aToDec(s,A),B)
end;
begin
var n:=ReadlnString('Какое число перевести?');
var (a,b):=ReadInteger2('Исходное и результирующее основания:');
Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')');
end.
Пример
Какое число перевести? 2018
Исходное и результирующее основания: 10 16
2018(10) = 7E2(16)
return b ? gcd(b, a%b) : a;
}
Это красивая реализация в виде тернарной строчки. Рекурсивная функция.
int gcd(int a, int b){
if (b)
return gcd(b, a%b);
else
return a;
}
Это тоже рекурсивная функция, просто не с тернарной строчкой, а с ифом.
int gcd(int a, int b){
while (b){
swap(a,b);
b%=a;
}
return a;
}
Это реализация циклом. Нерекурсивная функция.
Вот, среди них можешь выбрать любую функцию, которая тебе больше нравится. Теперь программа.
#include<iostream>
using namespace std;
int gcd(int a, int b){
//скопипастишь любую понравившуюся
}
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
cout<<gcd(gcd (a,b), gcd(b,c));
return 0;
}
Удачи❤