В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
Камишок777
Камишок777
23.05.2020 00:56 •  Информатика

Линейные алгоритмы Составит программу на С++ для вычисления значений функции
Базовый уровень
P = n√y³ + 1.09g
Не смог писать код в программе Visual Studio 2019..

Показать ответ
Ответ:
анель106
анель106
25.01.2023 19:06
//PascalABC.NET Версия 3.0 Сборка 1150
var n:integer;
begin
  writeln('Сколько стоит товар?');
  readln(n);
  n:=1000-n;
  writeln('Сдача ',n,' рублей. Нужны купюры:');
  writeln(n div 500, ' по 500 рублей, ', (n-(n div 500)*500)div 100, ' по 100 рублей, ', (n mod 100) div 50, ' по 50 рублей, ', (n-(n div 50)*50) div 10,' по 10 рублей, и ещё ', n mod 10, ' рублей мелочью.');
end.

Результат работы:
Сколько стоит товар?
324
Сдача 676 рублей.
Нужны купюры:
1 по 500 рублей, 1 по 100 рублей, 1 по 50 рублей, 2 по 10 рублей, и ещё 6 рублей мелочью.
0,0(0 оценок)
Ответ:
erik09hfilya
erik09hfilya
18.11.2022 09:30

Вам нужно найти такие a и b, что a + b = x и ab = y. По теореме Виета a и b - корни уравнения t^2-xt+y=0. Находим дискриминант D=x^2-4y, если он отрицательный - у уравнения не то что натуральных, действительных решений нет. Если дискриминант неотрицательный, но не полный квадрат, то натуральных решений тоже нет. Иначе решения уравнения (x\pm\sqrt D)/2, если они натуральные - это и есть ответ.

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

#include <iostream>

#include <cmath>

long long isqrt(long long number) {

 long long answer = 0, left = 0, right = 1e9;

 while (left <= right) {  

   long long middle = (left + right) / 2;

   long long middle_squared = middle * middle;

   if (middle_squared == number) {

     return middle;

   } else if (middle_squared < number) {

     answer = middle;

     left = middle + 1;

   } else {

     right = middle - 1;

   }

 }

 return answer;

}

int main() {

 long long x, y;

 std::cin >> x >> y;

 auto d = x * x - 4 * y;

 if (d < 0) {

   std::cout << 0;

   return 0;

 }

 auto sqrt_d = isqrt(d);

 if (sqrt_d * sqrt_d != d) {

   std::cout << 0;

   return 0;

 }

 if ((x - sqrt_d) % 2 != 0) {

   std::cout << 0;

   return 0;

 }

 std::cout << (x - sqrt_d) / 2 << " " << (x + sqrt_d) / 2;

}

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота