Другие языки программирования и технологии

Нужно сделать прогу в Паскале, чтобы вводилось число и если есть повторяющиеся цифры, то ответ "Да", иначе"Нет"

Например: 1234 "Нет", А 12234 "Да"
Переворачивать массив необязательно было, ведь последовательность цифр не играет роли.
var n:longint;
a:array[1..10] of byte;
i,k,x,j:byte;
begin
write('n=');
readln(n);
n:=abs(n);
k:=0;
while n>0 do
begin
k:=k+1;
a[k]:=n mod 10;
n:=n div 10;
end;
x:=0;
for i:=1 to k do
for j:=i+1 to k do
if a[i]=a[j] then
begin
x:=x+1;
Break;
end;
if x=0 then Writeln('No') else Writeln('Yes');
END.

А строкой еще проще

var n:string;
i,x,j:byte;
begin
write('n=');
readln(n);
x:=0;
for i:=1 to Length(n) do
for j:=i+1 to Length(n) do
if n[i]=n[j] then
begin
x:=x+1;
Break;
end;
if x=0 then Writeln('No') else Writeln('Yes');
END.

Если смущает Break, то можно и без него обойтись. Просто в некоторых случаях цикл будет вхолостую работать
Гумеров Рамиль
Гумеров Рамиль
64 708
Лучший ответ
Со строками всё можно сделать НАМНОГО проще
var
n:string;
s:string[2];
i:0..9;
begin
ReadLn(n);
s:='xx'; // любые 2 символа, чтобы длина была правильной
for i:=Low(i) to High(i) do begin
// s состоит из двух одинаковых ЧИСЛОВЫХ символов = i // можно было Str(i, s); s := s+s;
s[1] := Chr(Ord('0') + i); s[2] := s[1];
// собственно проверка
if Pos(s, n) > 0 then begin
WriteLn('Да - ', s);
Exit; // выход из программы после вывода
end;
end;
WriteLn('Нет');
end.

А без строк массивы не нужны:
var
n: longint;
digit, last: -1..9;
begin
ReadLn(n);
last := -1; // признак, что не было предыдущей цифры
while (n > 0) do begin
digit := n mod 10; n := n div 10;
if last = digit then begin
WriteLn('Да - ', digit);
Exit; // выход из программы после вывода
end;
last := digit;
end;
WriteLn('Нет');
end.
Эрик Яцковский
Эрик Яцковский
11 112

Похожие вопросы