Kuznetsova702
?>

Дана непустая последовательность целых чисел, оканчивающаяся нулем (0 является признаком окончания последовательности и в последовательность не входит найти и напечатать: 1. сумму всех чисел, больших х (значение х вводится с клавиатуры). если таких чисел нет, то напечатать «таких чисел нет» 2. количество четных чисел

Информатика

Ответы

myudanova631
Var a: array[1..1000] of longint; i,j,k,b,h,v: longint; begin i: =2; readln(a[1]); while (a[i-1]< > 0) do begin readln(a[i]); inc(i); end; readln(j); for k: =1 to i-1 do if a[k]> j then h: =h+a[k] else inc(b); if b=i-1 then writeln('takix 4isel netu'); for k: =1 to i-1 do if a[k] mod 2=0 then inc(v); writeln(h, ' ,v); end. ну при компиляции могут быть ошибки, т.к. писал сразу здесь.. но суть и её решение я вижу именно так
migor72

[Del me plz]

Подписываюсь под каждым словом объяснения @Nelle987.

Заданные значения x = a+b и y = ab - подходят под описание теоремы Виета. А значит, мы можем свести задачу к поиску корней квадратного уравнения в целых действительных числах.

Хочу дополнить ответ @Nelle987 другой реализацией целочисленного квадратного корня, работающего на этапе компиляции.

Код:

#include <iostream>constexpr long long isqrt (long long value, long long sq = 1ll, long long dlt = 3ll){    return sq <= value ? isqrt(value, sq+dlt, dlt+2ll) : (dlt >> 1) - 1ll;}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;    return 0;}
Алиса любит игры с формулами и недавно придумала такую игру: первый игрок загадывает два натуральных
Алиса любит игры с формулами и недавно придумала такую игру: первый игрок загадывает два натуральных
Алиса любит игры с формулами и недавно придумала такую игру: первый игрок загадывает два натуральных
irinabaranova2760

Вам нужно найти такие 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 является признаком окончания последовательности и в последовательность не входит найти и напечатать: 1. сумму всех чисел, больших х (значение х вводится с клавиатуры). если таких чисел нет, то напечатать «таких чисел нет» 2. количество четных чисел
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Larya
Sergei_sergei
milo4ka26
fakyou170
fymukham
svetavalera
Mexx9050
sinicin80
ogonizoloto
av52nazarov
rodsher7740
АлексейГагиковна1774
s-laplandia6
Galina_Yurevna
Plamia7917