Задания
Версия для печати и копирования в MS Word
Тип Д25 C2 № 9209
i

Дан мас­сив, со­дер­жа­щий не­от­ри­ца­тель­ные целые числа. Если сумма всех эле­мен­тов мас­си­ва чётная, нужно вы­ве­сти ко­ли­че­ство чётных (по зна­че­нию) эле­мен­тов мас­си­ва, если нечётная – ко­ли­че­ство нечётных.

На­при­мер, для мас­си­ва из 6 эле­мен­тов, рав­ных со­от­вет­ствен­но 2, 6, 12, 17, 3, 8, от­ве­том будет 4 – ко­ли­че­ство чётных эле­мен­тов, так как общая сумма всех эле­мен­тов чётна.

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

За­пре­ща­ет­ся ис­поль­зо­вать пе­ре­мен­ные, не опи­сан­ные ниже, но раз­ре­ша­ет­ся не ис­поль­зо­вать часть из опи­сан­ных.

 

Бей­сикПас­каль

CONST N=2000

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

...

END

const

N=2000;

var

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

i, k: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

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

алг

нач

    цел N=2000 | Из­ме­нять зна­че­ние
этой пе­ре­мен­ной нель­зя

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

    цел i, k

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

        ввод a[i]

    кц

    …

кон

// до­пус­ка­ет­ся также ис­поль­зо­вать

// це­ло­чис­лен­ные пе­ре­мен­ные i, k

a = []

N=2000 //ме­нять зна­че­ние N нель­зя

for i in range(0, N):

    a.append(int(input()))

Си++

#include <iostream>

using namespace std;

#define N 2000

int main(){

    int a[N];

    int i, k;

    for (i=0; i < N; i++)

        cin >> a[i];

    …

    return 0;

}

 

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

Спрятать решение

Ре­ше­ние.

На пер­вый взгляд для ре­ше­ния за­да­чи нужны 4 пе­ре­мен­ных: счётчик для пе­ре­бо­ра эле­мен­тов, счётчики чётных и нечётных эле­мен­тов, сумма всех эле­мен­тов, но в усло­вии раз­ре­ше­но ис­поль­зо­вать толь­ко 2 пе­ре­мен­ные.

Чтобы обой­ти это огра­ни­че­ние, за­ме­тим, что на самом деле до­ста­точ­но под­счи­ты­вать толь­ко ко­ли­че­ство нечётных эле­мен­тов. Зна­че­ние суммы можно не вы­чис­лять, так как тре­бу­ет­ся толь­ко чётность суммы, а она од­но­знач­но опре­де­ля­ет­ся ко­ли­че­ством нечётных эле­мен­тов. Ко­ли­че­ство чётных эле­мен­тов, если оно по­тре­бу­ет­ся, можно вы­чис­лить, зная общее число эле­мен­тов и ко­ли­че­ство нечётных.

Эта идея ре­а­ли­зо­ва­на в сле­ду­ю­щем фраг­мен­те на языке Пас­каль.

k:=0;

for i:=1 to N do begin

    if a[i] mod 2 = 1 then k:=k+1;

end;

if k mod 2 = 1

    then writeln(k)

else writeln(N-k);

 

Воз­мож­но также двух­про­ход­ное ре­ше­ние: на пер­вом про­хо­де опре­де­ля­ет­ся общая сумма, на вто­ром ко­ли­че­ство эле­мен­тов нуж­ной чётно­сти.

Эта идея ре­а­ли­зо­ва­на в сле­ду­ю­щем фраг­мен­те на ал­го­рит­ми­че­ском языке.

 

k:=0;

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

    k:=k+a[i]

кц

если mod(k,2)=0

    то

        k:=0;

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

            если mod(a[i],2) = 0

                то k:=k+1

            все

        кц

    иначе

        k:=0;

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

            если mod(a[i],2) = 1

                то k:=k+1

            все

    кц

все

вывод k

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 1 или 2 балла.0
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 2 балла.

Пред­ло­же­но в целом вер­ное ре­ше­ние, со­дер­жа­щее не более одной ошиб­ки из числа сле­ду­ю­щих.

1. От­сут­ствие ини­ци­а­ли­за­ции или не­вер­ная ини­ци­а­ли­за­ция одной или не­сколь­ких пе­ре­мен­ных (на­при­мер, от­сут­ствие по­втор­ной ини­ци­а­ли­за­ции при двух­про­ход­ном ре­ше­нии или по­втор­ная ини­ци­а­ли­за­ция до ана­ли­за ре­зуль­та­та пер­во­го про­хо­да).

2. Ошиб­ка при опре­де­ле­нии чётно­сти эле­мен­тов, в том числе про­вер­ка на чётность ин­дек­са вме­сто эле­мен­та.

3. Вывод ко­ли­че­ства чётных эле­мен­тов вме­сто ко­ли­че­ства нечётных и на­о­бо­рот.

4. От­сут­ству­ет вывод от­ве­та.

5. Ис­поль­зу­ет­ся пе­ре­мен­ная, не объ­яв­лен­ная в раз­де­ле опи­са­ния пе­ре­мен­ных.

6. Ин­декс­ная пе­ре­мен­ная в цикле не ме­ня­ет­ся (на­при­мер, в цикле while) или ме­ня­ет­ся не­вер­но.

1
Пред­ло­жен пра­виль­ный ал­го­ритм, вы­да­ю­щий в ка­че­стве ре­зуль­та­та вер­ное зна­че­ние.2
Мак­си­маль­ный балл2