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

Желательно на python олимпиадное задание по информатике 2019 года

Число e = 2, 718281828459...

находит применение во многих разделах математики, в

первую очередь алгебре и математическом анализе. Очень часто это число называют числом Эйлера в честь великого математика XVIII в Леонарда Эйлера (1707-1783).

Леонард Эйлер впервые использовал букву e для обозначения этого числа в книге «Механика», изданной в 1736 г., хотя в рукописях и письмах такое обозначение было использовано начиная с 1728 г.

В своих книгах, статьях и рукописях Эйлер рассмотрел множество вычисления числа e. Очень интересен связанный с представлением числа Эйлера в виде бесконечной
непрерывной дроби

Увеличивая число шагов, можно получить приближенное выражение числа Эйлера с высокой точностью в виде дроби.
Необходимо написать программу для поиска числителя и
знаменателя такой дроби при условии, что выбирается первый знаменатель, строго больший заданного числа n.

Формат входных данных:

В единственной строке входных данных записано целое число n (
2 ≤ n ≤10 (в 9й степени))

Формат выходных данных:

Выведите два натуральных числа, разделенных пробелами – числитель и знаменатель дроби, приближенно выражающей число Эйлера, при этом знаменатель должен быть минимальным, но больше n.

Пример входных данных:

15

Пример выходных данных:

144 53


Желательно на python олимпиадное задание по информатике 2019 годаЧисло e = 2, 718281828459...находит

👇
Ответ:
trisk
trisk
27.11.2020

Значение дроби можно вычислять так: начинаем с e = 0, затем обновляем значение e по формуле n / (n + e), уменьшая n, пока не получим 2 / (2 + ...). В конце прибавим к результату 2. Пример:

0\to \dfrac4{4+0}\to \dfrac3{3+\dfrac4{4+0}}\to\dfrac2{2+\dfrac3{3+\dfrac4{4+0}}}\to2+\dfrac2{2+\dfrac3{3+\dfrac4{4+0}}}

Все скучные операции с дробями оставим питону, пусть считает сам - у него для этого есть модуль fractions.

Знаменатели растут очень быстро - уже начиная с числа 13 знаменатель будет больше миллиарда.

Код (Python 3):

from fractions import Fraction

from itertools import count

n = int(input())

for k in count(3):

   e = Fraction(0)

   while k >= 2:

       e = k / (k + e)

       k -= 1

   e += 2

   a, b = e.numerator, e.denominator

   if b > n:

       print(a, b)

       break

Пример ввода:

1000000000

Пример вывода:

6706022400 2467007773

4,4(51 оценок)
Открыть все ответы
Ответ:
Milana000000111
Milana000000111
27.11.2020
{Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10], выяснить что больше сумма элементов лежащих над главной диагональю или под главной диагональю.}const nmax = 20;var A:Array[1..nmax,1..nmax] of integer; n,m,i,j,sumN,sumV:integer;
beginwrite('Введите число n');readln(n);for i:=1 to n do beginfor j:=1 to n do beginm:= random(20)-10;A[i,j]:= m;write(A[i,j]:4);end;writeln;end;
writeln;writeln;for i:=1 to n do beginfor j:=1 to n do beginif i>j then begin write(A[i,j]:4);sumN:= sumN + A[i,j];end;end;writeln;end;
writeln;writeln;
for i:=1 to n do beginfor j:=1 to n do beginif i < j then begin write(A[i,j]:4);sumV:= sumV + A[i,j];end;
end;writeln;end;if sumN > sumV then write('Cумма элементов лежащих под главной диагональю больше')else write('Cумма элементов лежащих над главной диагональю больше');end.
4,8(74 оценок)
Ответ:
Сначала код без комментариев:

Var
S:longint;
i:integer;
A:byte;

Begin
S:=0;
Repeat
   Read(A);
   if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A;
Until A = 0;
WriteLn('S = ',S);
End.

Теперь объяснение каждой строки:

Var
S:longint;
i:integer;
A:byte; // В эту переменную будет вводится число с клавиатуры. Тип Byte может принимать значения от 0 до 255. Поэтому его как раз хватит.

Begin
S:=0; // Тут будет храниться сумма, поэтому переменную следует сперва обнулить.

Repeat // далее начинается цикл
   Read(A); // эта команда каждый раз считывает с клавы число, и записывает его в переменную A.

   if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A; //тут проверяется 2 условия, и если они выполняются - к переменной S прибавляется значение переменной А
   1 условие: число нечётно, то есть остаток от деления его на 2 не равен нулю (A mod 2 <>0)
   2 условие: Число кратно 7, то есть делится без остатка на 7, то есть остаток от деления равен нулю (A mod 7 = 0)

Until A = 0; // Цикл повторяется до тех пор, пока введённое с клавы число не будет равно нулю (A = 0)

WriteLn('S = ',S); // Тут выводится искомая сумма
End.
4,7(70 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ