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


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

Дан мас­сив, со­дер­жа­щий 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 < N; ++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 16

    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] <= 15: l := 1

        при 16 <= a[i] <= 255: l := 2

        при 256 <= a[i] <= 4095: l := 3

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

    все

    выбор

        при 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] <= 9 ||

    16 <= a[i] && a[i] <= 99 ||

    256 <= a[i] && a[i] <= 999 ||

    4096 <= a[i] && a[i] <= 9999

    )

    ++k;

}

cout << k;

 

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

 

Python

k = 0

for b in a:

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

        k += 1

print(k)

 

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

 

Python

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