М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Gagatyngerz
Gagatyngerz
15.07.2022 20:07 •  Информатика

Python. Рекурсии.
Фишки

Дана полоска из клеток, пронумерованных от 1 до N слева направо. Разрешено снимать или ставить фишку на клетку с номером 1 или на клетку, следующую за самой левой из установленных фишек (правее неё), если она пуста. Изначально полоска пуста. Нужно разместить фишки во всех клетках.

Входные данные

Программа получает на вход количество клеток в полоске N(1≤N≤10).

Выходные данные

Программа должна вывести последовательность номеров клеток, с которыми совершается действие. Если фишка снимается, то номер клетки должен выводиться со знаком минус. Количество действий не должно превышать 104. Если существует несколько возможных решений задачи, то разрешается вывести любое.

Примеры:
Ввод:
3
Вывод:
1 2 -1 3 1

Программа(работает только с нечётными числами, на других зависает):
from sys import setrecursionlimit
setrecursionlimit(10**9)
def f(a,i):
if a == 1:
print(1,end = ' ')
elif i == a - 1:
print(i+1,end = ' ')
f(a-2,1)
else:
print(i+1,-i,end = ' ')
f(a,i+1)
a = int(input())
print(1,end = ' ')
f(a,1)

👇
Открыть все ответы
Ответ:
PaymLaim
PaymLaim
15.07.2022

uses

 graphABC; //Подключаем графический модуль


const

 W = 800; H = 500;//Размеры графического окна


function F(x: real): real;

begin

 F :=x*x-6*x+9; //Функция

end;


var

 x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;

 a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;

 i: byte;

 s: string;


begin

 SetWindowSize(W, H); //Устанавливаем размеры графического окна

 //Координаты левой верхней границы системы координат:

 xLeft := 50;

 yLeft := 50;

 //Координаты правой нижней границы системы координат:

 xRight := W - 50;

 yRight := H - 50;

 //интервал по Х; a и b должно нацело делится на dx:

 a := -2; b := 6; dx := 0.5;

 //Интервал по Y; fmin и fmax должно нацело делится на dy:

 fmin := -10; fmax := 20; dy := 2;

 //Устанавливаем масштаб:

 mx := (xRight - xLeft) / (b - a); //масштаб по Х

 my := (yRight - yLeft) / (fmax - fmin); //масштаб по Y

 //начало координат:

 x0 := trunc(abs(a) * mx) + xLeft;

 y0 := yRight - trunc(abs(fmin) * my);

 //Рисуем оси координат:

 line(xLeft, y0, xRight + 10, y0); //ось ОХ

 line(x0, yLeft - 10, x0, yRight); //ось ОY

 SetFontSize(12); //Размер шрифта

 SetFontColor(clBlue); //Цвет шрифта

 TextOut(xRight + 20, y0 - 15, 'X'); //Подписываем ось OX

 TextOut(x0 - 10, yLeft - 30, 'Y'); //Подписываем ось OY

 SetFontSize(8); //Размер шрифта

 SetFontColor(clRed); //Цвет шрифта

 { Засечки по оси OX: }

 n := round((b - a) / dx) + 1; //количество засечек по ОХ

 for i := 1 to n do

 begin

   num := a + (i - 1) * dx; //Координата на оси ОХ

   x := xLeft + trunc(mx * (num - a)); //Координата num в окне

   Line(x, y0 - 3, x, y0 + 3); //рисуем засечки на оси OX

   str(Num:0:1, s);

   if abs(num) > 1E-15 then //Исключаем 0 на оси OX

     TextOut(x - TextWidth(s) div 2, y0 + 10, s)

 end;

 { Засечки на оси OY: }

 n := round((fmax - fmin) / dy) + 1; //количество засечек по ОY

 for i := 1 to n do

 begin

   num := fMin + (i - 1) * dy; //Координата на оси ОY

   y := yRight - trunc(my * (num - fmin));

   Line(x0 - 3, y, x0 + 3, y); //рисуем засечки на оси Oy

   str(num:0:0, s);

   if abs(num) > 1E-15 then //Исключаем 0 на оси OY

     TextOut(x0 + 7, y - TextHeight(s) div 2, s)

 end;

 TextOut(x0 - 10, y0 + 10, '0'); //Нулевая точка

 { График функции строим по точкам: }

 x1 := a; //Начальное значение аргумента

 while x1 <= b do

 begin

   y1 := F(x1); //Вычисляем значение функции

   x := x0 + round(x1 * mx); //Координата Х в графическом окне

   y := y0 - round(y1 * my); //Координата Y в графическом окне

   //Если y попадает в границы [yLeft; yRight], то ставим точку:

   if (y >= yLeft) and (y <= yRight) then SetPixel(x, y, clGreen);

   x1 := x1 + 0.001 //Увеличиваем абсциссу

 end

end.

4,6(9 оценок)
Ответ:
ArtemkaRus71
ArtemkaRus71
15.07.2022

int a; // Определение переменной a целочисленного типа со значением, зависящим от местонахождения в памяти(мусор)

float b; // Определение переменной b вещественного типа со значением, зависящим от местонахождения в памяти(мусор)

double c = 14.2; // Определение переменной c вещественного типа со значением 14.2(вещественный тип)

char d = 's';// Определение переменной d символьного типа со значением символьного типа

bool k = true; Определение логической переменной k(булева типа/логического типа/etc.) со значением логическим.


Данная информация справедлива для C/C++.

4,6(76 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ