@artgor261
Студент РТУ МИРЭА

Как решить 22 задание ЕГЭ по информатике?

Условие задачи:
Ниже записана программа, которая вводит натуральное число x, выполняет преобразования, а затем выводит результат. Укажите наименьшее значение x, при вводе которого программа выведет число 64.

Код программы на Питоне:
x = int(input())
a = 3*x + 67
b = 3*x - 61
while a != b:
  if a > b:
    a -= b
  else:
    b -= a
print(a)


Код программы на плюсах:
#include<iostream>
using namespace std;
int main()
{
  int x, a, b;
  cin >> x;
  a = 3*x + 67;
  b = 3*x – 61;
  while (a != b) {
    if (a > b)
      a -= b;
    else
      b -= a;
    }
  cout << a << endl;
}


Я пишу на Си, поэтому переписал программу на него:
int func(int x)
{
    int a, b;

    a=3*x+67;
    b=3*x-61;

    while(a!=b)
    {
        if(a>b) a-=b;
        else b-=a;
    }
    return a;
}


Далее я написал следующее:
int main()
{
    int num;

    num=0;

    while(func(num)!=64) num++;
    printf("%d", num);
}


При запуске программы ничего не происходит. Что я делаю не так? Всегда эти задачи решал таким образом.
Ссылка на задачу: https://kpolyakov.spb.ru/school/ege/gen.php?action...
  • Вопрос задан
  • 752 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Смотри, по логике.
a = 3x + 67
b = 3x - 61

для положительных x число a всегда будет больше на 128 чем b
поэтому после первой итерации цикла будет
a = 128
b = 3x - 61

Чтобы получить 64, нужно, чтобы b было либо 64, либо 64 + 128 * k, где k натуральное число.
Тебе нужно найти такое значение x, чтобы 3x - 61 = k * 128 + 64
Отсюда
3x = k * 128 + 125
перебирая k, получим k = 2
3x = 256 + 125
x = 381 / 3 = 127
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Покрыли не всю область входных значений например. При нуле вайл у вас будет бесконечный. Вообще тут надо решать математически мне кажется. Начните наприме num с 100 и получите результат (не факт что правильный). Так же у вас не учтен отрицательный num.

UPD. Если посмотреть математически - при x < 61/3 b будет отрицательным. А a - положительным. Соответственно вычитая первое из второго a будет только расти и никогда не станет равным b. Вот ничего и не происходит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы