Задания
Версия для печати и копирования в MS Word
Тип 17 № 37350
i

В файле со­дер­жит­ся по­сле­до­ва­тель­ность из 10 000 целых по­ло­жи­тель­ных чисел. Каж­дое число не пре­вы­ша­ет 10 000. Опре­де­ли­те и за­пи­ши­те в от­ве­те сна­ча­ла ко­ли­че­ство пар эле­мен­тов по­сле­до­ва­тель­но­сти, у ко­то­рых сумма нечётна, а про­из­ве­де­ние де­лит­ся на 3, затем мак­си­маль­ную из сумм эле­мен­тов таких пар. В дан­ной за­да­че под парой под­ра­зу­ме­ва­ет­ся два раз­лич­ных эле­мен­та по­сле­до­ва­тель­но­сти. По­ря­док эле­мен­тов в паре не важен.

За­да­ние 17

Ответ:

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

Ре­ше­ние.

Сна­ча­ла счи­та­ем все числа из файла в мас­сив. Для каж­дой пары будем про­ве­рять, крат­но ли 3 про­из­ве­де­ние эле­мен­тов пары и нечётна ли сумма эле­мен­тов пары. Если про­из­ве­де­ние крат­но 3, а сумма эле­мен­тов нечётна, будем уве­ли­чи­вать зна­че­ния счётчика count и про­ве­рять, боль­ше ли сумма эле­мен­тов пары те­ку­щей мак­си­маль­ной суммы. Если сумма эле­мен­тов пары боль­ше те­ку­щей мак­си­маль­ной суммы, будем об­нов­лять зна­че­ние пе­ре­мен­ной maxsum.

 

При­ведём ре­ше­ние за­да­чи на языке Pascal.

var

i, j: integer;

count: longint;

maxsum: integer;

arr: array[1..10000] of integer;

f: text;

begin

assign(f,'C:\17.txt');

reset(f);

maxsum := 0;

count := 0;

for i := 1 to 10000 do readln(f, arr[i]);

for i := 1 to 10000 - 1 do

for j := i + 1 to 10000 do begin

if ((arr[i] * arr[j]) mod 3 = 0) and ((arr[i] + arr[j]) mod 2 <> 0) then begin

count := count + 1;

if arr[i] + arr[j] > maxsum then maxsum := arr[i] + arr[j];

end;

end;

writeln(count, ' ', maxsum);

end.

 

При­ведём ре­ше­ние Ни­ко­лая Чур­ки­на (Ти­ма­шевск) на языке Python.

count = m = 0

f = open('17.txt')

l = [int(i) for i in f]

for i in range(len(l) - 1):

for j in range(i + 1, len(l)):

if (l[i] + l[j]) %2 != 0 and (l[i] * l[j]) % 3 == 0:

count += 1

m = max(m, l[i] + l[j])

print(count, m)

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла ответ  — 13931722 19993.

 

При­ме­ча­ние.

Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Алек­сандра Кон­ки­на на языке Java.

    int count = 0;

        int maxSum = 0;

        List lines = Files.readAllLines(Paths.get("17.txt"));

        int[] numbers = lines.stream().mapToInt(Integer::parseInt).toArray();

        for (int i = 0; i < numbers.length - 1; i++) {

            for (int j = i + 1; j < numbers.length; j++) {

                int sum = numbers[i] + numbers[j];

                int product = numbers[i] * numbers[j];

                if (sum % 2 != 0 && product % 3 == 0) {

                    count++;

                    maxSum = Math.max(maxSum, sum);

                }

            }

        }

        System.out.println(count);

        System.out.println(maxSum);


Аналоги к заданию № 37350: 37354 Все

Раздел кодификатора ФИПИ: 1.7.2 Ос­нов­ные кон­струк­ции языка про­грам­ми­ро­ва­ния. Си­сте­ма про­грам­ми­ро­ва­ния