Алгоритм решения задачи кузнечика Саньков Денис гр.IA-112
Представим плоскость по которой скачет кузнечик,как прямоугольную систему координат.
Блок схема алгоритма Блок схема алгоритма будет состоять из 4 пользовательских функции и одной функции main. Одна функция необходима для ввода значений,а каждая из 3 функции будет рассматривать определённый случай.
x и y равны или разность между ними чётная В этих случаях не имеет значения как начнёт двигаться кузнечик. Он может двигаться начиная как с оси X ,так и с оси Y. Как он бы не начал двигаться количество шагов будет одинаковое
Начало Kp=0;i=0;j=0 i=x? i=i+1; kp=kp+1; i=i-1; kp=kp+1; j=y? j=j+1; kp=kp+1; i=x or j=y ? конец Блок схема для этого случая да нет да нет да нет j=j-1; kp=kp+1;
Код данной функции int x_y_ico(int x,int y) { int kp=0; Int i=0; Int j=0; do { if (i==x) { i--; kp++; } else { i++; kp++; } if (j==y) {j--; kp++; } else { j++;kp++; } } while (i!=x || j!=y); return kp; }
x больше y В этом случае,то относительно какой оси кузнечик начнёт двигаться в начале, играет роль.Кузнечик совершит меньшее количество шагов в том случае,если начнёт двигаться относительно оси X.
Блок схема для этого случая Начало Kp=0;i=0;j=0 i=x? kp=kp-1; i=i+1; kp=kp+1; j=y? j=j+1; kp=kp+1; i=x or j=y ? конец да нет да нет да нет j=j-1; kp=kp+1; break
Код данной функции int x_big_y(int x,int y) { int kp=0; Int i=0; Int j=0; do { if (i!=x) { i++; kp++; } else { kp--;break;} if (j==y) {j--; kp++; } else { j++;kp++; } } while (i!=x || j!=y); return kp; }
y больше x В этом случае,то относительно какой оси кузнечик начнёт двигаться в начале, играет роль.Кузнечик совершит меньшее количество шагов в том случае,если начнёт двигаться относительно оси Y.
Блок схема для этого случая Начало Kp=0;i=0;j=0 j=y? kp=kp-1; j=j+1; kp=kp+1; i=x? i=i+1; kp=kp+1; i=x or j=y ? да нет да нет да нет i=i-1; kp=kp+1; break конец
Код данной функции int y_big_x(int x,int y) { int kp=0; Int i=0; Int j=0; do { if (j!=y) { j++; kp++; } else { kp--;break;} if (i==x) {i--; kp++; } else { i++;kp++; } } while (i!=x || j!=y); return kp; }
Фунция ввода значений Функция будет предлагать ввести точку с координатами x и у.
Блок схема для функции ввода Начало x,y X<0?| x=x* -1 y<0?| y=y* -1 конец да да нет нет
void input_x_y(int &x,int &y) { printf(“Введи координату по x: ”); scanf(“%d”,&x); if (x<0) x*=-1; printf(“Введи по координату по y: ”); scanf(“%d”,&y); if (y<0) y*=-1; } Код функции
Функция main будет вызывать в ходе выполнения программы одну из этих функции в зависимости от введённых x и y. Главная функция
Блок схема функции main Начало x-y%2=0 ? x_y_ico y>x? да нет нет да x,y x_y_ico x_big_y x_big_y y_big_x y_big_x конец
Код программы main int main( ) { int x,y; input_x_y(x,y); if (x==0 && y==0) { printf(“Количество прыжков =0”);return 0;} if ((x-y)%2==0 || x==y || (y-x)%2==0) { printf(“Количество прыжков =%d”,x_y_ico(x,y));return 0; } If (x>y) { printf(“Количество прыжков =%d”,x_big_y(x,y));return 0; } If (x
Получаемый вывод при различных случаях
x и y равны между собой
Разность между x и y чётная
Разность между y и x чётная
x больше y
y больше x
Спасибо за просмотр:)