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

Обсуждение

давно
Посетитель
7438
7205
14.11.2007, 10:04
общий
это ответ
Здравствуйте, Мироненко Николай Николаевич!
Решение сводится к нахождению цифр
(например, делением на 1000, 100, 10 и остаток)
И анализируй как хочется...
а) сравниваем 1, 4 и 2, 3
б,в) можно по разному.
Как вариант, считаем сначала цифры в массиве [0..9],
предварительно обнуленном. Индексом служат сами цифры.
Анализируем массив.
б)в массиве должны быть только два ненулевых значения, причем только 1 и 3
в)должны быть четыре единицы
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
14.11.2007, 12:42
общий
это ответ
Здравствуйте, Мироненко Николай Николаевич!
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;
Форма ответа