СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости


Задания
Версия для печати и копирования в MS Word
Задание 25 № 14711

Дан массив, содержащий 2018 положительных целых чисел, не превышающих 30 000. Необходимо определить, сколько в этом массиве элементов, десятичная и восьмеричная запись которых содержит одинаковое количество цифр.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

 

 

БейсикPython

CONST N=2018

DIM A(N) AS INTEGER

DIM B, I, K, L, M AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

# кроме уже указанных

# допускается использование

# целочисленных переменных

# k, b, l, m

a = []

N = 2018

for i in range(0, N):

    a.append(int(input()))

ПаскальАлгоритмический язык

const

    N=2018;

var

    a: array [1..N] of integer;

    b, i, k, l, m: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

алг

нач

    цел N=2018

    целтаб a[1:N]

    цел b, i, k, l, m

    нц для i от 1 до N

        ввод a[i]

    кц

    …

кон

Си++

#include <iostream>

using namespace std;

const int N=2018;

int main(){

    int a[N];

    int b, i, k, l, m;

    for (i=0; i        cin >> a[i];

    …

    return 0;

}

 

 

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Решение.

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

Определить совпадение количества цифр можно разными способами.

 

Способ 1. Количество цифр в записи числа можно определить с помощью последовательного деления числа на основание системы счисления

 

Паскаль

k := 0;

for i:=1 to N do begin

    l := 0; b := a[i];

    while b > 0 do begin

        l := l+1;

        b := b div 8

    end;

    m := 0; b := a[i];

    while b > 0 do begin

        m := m+1;

        b := b div 10

    end;

    if l = m then k := k+1

end;

writeln(k)

 

Способ 2. Количество цифр в записи числа можно определить с помощью проверки на принадлежность к заранее заданному диапазону

 

Алгоритмический язык

k := 0

нц для i от 1 до N

    выбор

        при 1 <= a[i] <= 7: l := 1

        при 8 <= a[i] <= 63: l := 2

        при 64 <= a[i] <= 511: l := 3

        при 512 <= a[i] <= 4095: l := 4

        при 4096 <= a[i] : l := 5

    все

    выбор

        при 1 <= a[i] <= 9: m := 1

        при 10 <= a[i] <= 99: m := 2

        при 100 <= a[i] <= 999: m := 3

        при 1000 <= a[i] <= 9999: m := 4

        при 10000 <= a[i] : m := 5

    все

    если l=m

        то k := k+1

    все

кц

вывод k

 

Способ 3. Можно не определять количество цифр, а заранее найти диапазоны значений, в которых количество цифр в восьмеричной и десятичной записях совпадает

 

C++

k = 0;

for (i=0; i    if ( 1 <= a[i] && a[i] <= 7 ||

    10 <= a[i] && a[i] <= 63 ||

    100 <= a[i] && a[i] <= 511 ||

    1000 <= a[i] && a[i] <= 4095 ||

    10000 <= a[i]

    )

    ++k;

}

cout << k;

 

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

Например, в языке Python это можно сделать с помощью функций oct и str. В приведённой ниже программе учтено, что функция oct в Python 3 добавляет к восьмеричной записи числа двухсимвольный префикс 0o, но неучёт этого префикса в работе учащегося не считается ошибкой

 

Python

k = 0

for b in a:

    if len(oct(b)[2:]) == len(str(b)):

        k += 1

print(k)

 

Язык Python позволяет реализовать описанный выше способ с помощью одной строки:

 

Python

print(sum(1 for b in a if len(oct(b)[2:]) == len(str(b))))

Источник: СтатГрад: Тре­ни­ро­воч­ная ра­бо­та 28.11.2017 ИН10203