Лидеры рейтинга

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

1058

Россия, пос. Теплоозёрск, ЕАО


ID: 226425

Konstantin Shvetski

Модератор

314

Россия, Северодвинск


ID: 401284

Михаил Александров

Советник

278

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

177

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

105


ID: 404002

sglisitsyn

6-й класс

42


ID: 242862

Hunter7007

Мастер-Эксперт

31

Россия, Омск


8.10.3

30.10.2021

JS: 2.10.3
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-12-04 22:46:17-standard


Решение алгоритмов, схемы и классы алгоритмов, построение блок-схем.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 109319

Раздел:  Алгоритмы и теория программирования
Автор вопроса: Мироненко Николай Николаевич
Дата: 14.11.2007, 03:27 Консультация закрыта
Поступило ответов: 2

Помогите написать программу для решения задачи на языке Pascal (если можно с описанием):
Дано натуральное число n меньше-ровно 9999
а) Является ли это число палиндромом (перевёртышем) с учетом четырех цифр, как, например, числа 2222, 6116, 0440 и т. д.?
б) Верно ли, что это число содержит ровно три одинаковые цифры, как, например, числа 6676, 4544, 0006 и т.д.?
в) Верно ли, что все четыре цифры числа различны?

Здравствуйте, Мироненко Николай Николаевич!
Решение сводится к нахождению цифр
(например, делением на 1000, 100, 10 и остаток)
И анализируй как хочется...
а) сравниваем 1, 4 и 2, 3
б,в) можно по разному.
Как вариант, считаем сначала цифры в массиве [0..9],
предварительно обнуленном. Индексом служат сами цифры.
Анализируем массив.
б)в массиве должны быть только два ненулевых значения, причем только 1 и 3
в)должны быть четыре единицы

Лысков Игорь Витальевич

Мастер-Эксперт
14.11.2007, 10:04
Ответ # 193831 от Зиновьев Дмитрий Владимирович
Здравствуйте, Мироненко Николай Николаевич!
Program Chislo;
function CountDiffLetter(InData: String): integer;
var cnt: integer;
be: boolean;
a: array of char;
i, j: integer;
begin
cnt := 0;
SetLength(a, Length(InData));
for i := 1 to Length(InData) do
begin
be := true;
for j := 0 to i - 2 do
if InData[i] = a[j] then be := false;
a[i] := InData[i];
if be then cnt := cnt + 1;
end;
CountDiffLetter := cnt;
end;

function CountEq3Letter(InData: String): Boolean;
begin
if (InData[1] = InData[2] )AND(InData[1] = InData[3] ) AND (InData[1] <> InData[4] ) THEN CountEq3Letter := True
ELSE
if (InData[1] = InData[4] )AND(InData[1] = InData[3] ) AND (InData[1] <> InData[2] ) THEN CountEq3Letter := True
ELSE
if (InData[1] = InData[2] )AND(InData[1] = InData[4] ) AND (InData[1] <> InData[3] ) THEN CountEq3Letter := True
ELSE
if (InData[3] = InData[2] )AND(InData[1] = InData[4] ) AND (InData[1] <> InData[1] ) THEN CountEq3Letter := True
ELSE
CountEq3Letter := False
end;
Var
InData: string;
TempData: string;
i: integer;
Begin
WriteLn('Введите число');
Readln(InData);
IF Length(InData) < 4 THEN
BEGIN
WriteLn('Слишком короткое число');
Readln
END ELSE
BEGIn
for i := 1 to Length(InData) DO TempData := InData[i] + TempData;
IF TempData = InData Then WriteLn('Число - полиндром') ELSE WriteLN('Число не полиндром');
IF CountEq3Letter(InData) THEN WriteLN('Пункт Б - верно') ELSE WriteLN('Пункт Б - неверно');
IF CountDiffLetter(InData) = Length(InData) THEN WriteLN('Пункт B - верно') ELSE WriteLN('Пункт B - неверно');
END;
end;

Зиновьев Дмитрий Владимирович

Посетитель
14.11.2007, 12:42
Мини-форум консультации # 109319
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Алексеев Владимир Николаевич

Мастер-Эксперт

Рейтинг: 1058

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 244

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 43

Gluck

9-й класс

Рейтинг: 42

CradleA

Мастер-Эксперт

Рейтинг: 22

Роман Селиверстов

Советник

Рейтинг: 0