Форум » Массивы, сортировка, работа с файлами » Нестандартный вариант. Задача 25 » Ответить

Нестандартный вариант. Задача 25

nikson: Если не ошибаюсь, то есть выход за границы массива. Подставил Ваши входные данные и вылетает на While const N = 6; var a : array [0..N - 1] of integer; i, j, count : integer; begin for i := 0 to N - 1 do readln(a); count := 0; for i := 0 to N - 1 do begin j := 1; while a[j] <> a do j := j + 1; if j = i then count := count + 1 end; writeln(count); end.

Ответов - 6

Dm: nikson, добрый вечер! Извиняюсь за опечатку! Первоначально на Паскале массив был с индексами от 1 до N. Потом я решил приблизить решение к решениям на других языках, но 1 на 0 в этом месте не поменял. Выхода за границы в цикле while не будет, т. к. j всегда будет меньше, либо равен i (но в последнем случае будут равны и сами элементы массива). С уважением, Дмитрий Богданов

nikson: Вот решение на Бэйсике Module module1 Sub main() Const N = 2017 Dim A(N) As Integer Dim i, j, count As Integer For i = 1 To N A(i) = console.readline Next count = 2017 For i = 1 To N - 1 For j = i + 1 To N If A(i) = A(j) Then count -= 1 Next Next console.writeline(count) console.readkey() End Sub End Module

nikson: За использование сортировки массива не снизят баллы? Вот код этой задачи Module Module1 Sub Main() Const N = 2017 Dim A(N) As Integer Dim i, j, count As Integer For i = 1 To N A(i) = Console.Readline() Next i Array.Sort(A) j = A(1) count = 1 For i = 2 To N If A(i) <> j Then count += 1 : j = A(i) Next i Console.WriteLine(count) Console.ReadKey() End Sub End Module


Dm: nikson, не снизят, но надо иметь ввиду: 1) сортировка "испортит" массив. В целом плохой стиль изменять сами входные данные, вдруг они еще будут нужны далее в программе? 2) так как сортировка будет переставлять элементы, скорость работы будет ниже, хотя в 25 задании эффективность программы не оценивают. Могу предложить еще более радикальный метод. Если сразу объявить A множеством (например, в С++: [pre2]set<int> A;[/pre2]), и считывать элементы в него, то потом достаточно вывести длину этого множества: [pre2]A.count()[/pre2]. В PascalABC и питоне множества тоже поддерживаются, но опять же, это будет совсем другая программа.

zinaida_49@mail.ru: Просто изменить начальное значение J на 0. J:=0;

Dm: zinaida_49@mail.ru, да, спасибо! Это опечатку уже исправили.



полная версия страницы