Задать вопрос
@IndusDev

Как реализовать этот код лучшим образом?

Есть такая задача:
5a11457a1d01e691209726.png

Я решил ее так:
var N, i, l, k,j:integer;
	A: array [1..100] of longint;
    B: array [1..100] of longint;
begin
    l:=0;
	read(N);
    for i:=1 to N do 
    	begin
        read(A[i]);
      end;
    
    for i:=1 to N do
        begin
          k:=0;
        	for j:=1 to l do
            	if(A[i]=B[l]) then
                	begin
                		k:=1;
                    end;
            if(k<>1) then
            	begin
            		Inc(l);
            		B[l]:=A[i];
                end;
        end;
    write(l);
end.


Все тесты она прошла, но мне кажется, что это очень плохое решение. Как бы вы написали ее? Просто через 2 массива в голову ничего не приходит.
  • Вопрос задан
  • 201 просмотр
Подписаться 2 Простой Комментировать
Решение пользователя ⚡ Kotobotov ⚡ К ответам на вопрос (2)
angrySCV
@angrySCV
machine learning, programming, startuping
как вариант на более высоком уровне можно положить все входящие данные в Set (коллекцию содержащее множество уникальных элементов), и потом посчитать размер коллекции.
код будет выглядеть в стиле:
inputStringData
 .split(" ")
 .map(inputElement => inputElement.toInt)
 .toSet
 .size

П. С.
шаг с переводом строки ( .map(inputElement => inputElement.toInt) ) в тип Интэджер не обязателен, можно посчитать и разные строки, это лишь улучшает эффективность хранения промежуточного массива перед подсчетом
Ответ написан
Комментировать