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

Укажите минимальное натуральное число, при вводе которого этот алгоритм напечатает сначала 2 потом 2 . Pascal

var x, a, b: longint;

begin

readln(x);

a := 0; b := 0;

while x > 0 do begin

if x mod 2 = 0 then

a := a + x mod 7

else

b := b + 1;

x := x div 7;

end;

writeln(a); write(b);

end.

C++

#include

using namespace std;

int main()

{

int x, a, b;

cin >> x;

a = 0; b = 0;

while (x > 0) {

if (x%2 == 0) a = a + x % 7;

else b = b + 1;

x = x / 7;

}

cout << a << endl << b;

return 0;

}

Python

x = int(input())

a=0; b=0

while x > 0:

if x%2 == 0:

a = a + x % 7

else:

b = b + 1

x = x // 7

print(a, b)

👇
Ответ:
NadyaSmirnovaa
NadyaSmirnovaa
28.01.2020

105

Объяснение:

Обернем эту программу в другую, которая будет подавать на ее вход натуральные числа в порядке возрастания до тех пор, пока в результате вычислений не получится пара (2, 2):

user_input = 1

while True:

   x = user_input

   a = 0; b = 0

   while x > 0:

       if x % 2 == 0:

           a = a + x % 7

       else:

           b = b + 1

       x = x // 7

   print(user_input, a, b)

   if a == 2 and b == 2:

       break

   user_input = user_input + 1

print('Found it: ' + str(user_input))

4,4(80 оценок)
Открыть все ответы
Ответ:
avatar23455
avatar23455
28.01.2020
В задаче имеется "топорное решение" — посчитать напрямую. Получившееся число будет восьмизначным, что не так уж и страшно, если в голову не приходят другие решения.

Рассмотрим, однако, решение, которое позволит делать подобные задачи без прямого подсчёта. Для этого, прежде всего, переведём всё в степени тройки:

98328316+35+35+35−9−32−32==
9
8
+
3
5
−9 =
3
2
8
+
3
5

3
2
=
3
16
+
3
5

3
2

Как представляется число 3n в троичной системе счисления? Давайте подумаем, как мы переводим из десятичной системы в троичную? Сначала делим на 3, затем частное делим на 3, затем новое частное на 3 и т.п. Что получится в случае деления 3n на 3? Очевидно, что 3n-1. А если его поделить дальше на 3, то получится 3n-2. Если так сделать n раз, то в конце останется 30, то есть. Таким образом, это будет число 100..00, где количество нулей равно n.

То есть, например, 8-ая степени тройки в троичной системе представима в виде 1000000003. А 35 — это 1000003.

Вернёмся теперь к нашей сумме. Давайте сначала в столбик сложим 316 и 35 в троичной системе счисления.

100…000000016100000100…0⏟10100000 1
00

0000000

16
100000 1
00

0

10
100000

Теперь остаётся из этого вычесть 32. Для этого придётся "занять" разряд. Но принцип тут такой же, как и в обычной, десятичной системе счисления, только 0 будут превращаться не в 9, а в 2 (самую большую цифру в троичной системе счисления:

100…0⏞10100000−100100…0⏟10022200 1
00

0

10
100000 −100 1
00

0

10
022200

Таким образом, количество двоек в указанной сумме получилось равным 3.

ответ: 3 двойки в троичной записи.
4,4(70 оценок)
Ответ:
prostochel4
prostochel4
28.01.2020

Составил тебе только программу. Для блок-схемы создавай отдельную тему.

const

 a = 3.14;

 b = -7.8;

 n = 15;

 x: array[1..n] of real = (12.37, 16.55, 2.43, 0.81, 0.32, 1.345, -12.18, 0.15, -4.314, 1.29, 54.38, 0.214, -3.837, 0.918, -75.014);

var

 i, k: integer;

 p: real;

begin

 k := 0;

 p := 1;

 for i:=1 to n do

   if (x[i]>0) and (x[i]>b) then

   begin

     p := p * x[i];

     inc(k);

   end;

 if k = 0 then writeln('Нет искомых элементов в массиве')

 else writeln('Количество искомых элементов: ',k,'; их произведение = ',p:0:3);

end.

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