Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2009, 09:38   #1
_°PROTOS°_
 
Аватар для _°PROTOS°_
 
Регистрация: 25.04.2009
Сообщений: 8
Смущение SOS!!! Программа на Паскале

Доброго времени суток, нужна ваша помощь в решении задачки....
Вот собственно само условие:

Даны четырёхзначные числа n и k. Из этого
промежутка выбрать те числа, запись которых
содержит три одинаковых цифры.
Например числа, 5655, 4414, 0005 содержит три
одинаковых цифры.

Заранее благодарен
_°PROTOS°_ вне форума Ответить с цитированием
Старый 25.04.2009, 11:46   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

0005 это не 4х-значное число, ибо ведущие ноли не являются значащими цифрами.
puporev вне форума Ответить с цитированием
Старый 25.04.2009, 12:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот.
Код:
function HasThreeSimuliarDigits(Num : integer):boolean;
var
  cntA:array[0..9] of integer;
  i, OneDigit : integer;
begin
  for i:=0 to 9 do cntA[i]:=0;
  while Num>0 do begin
      OneDigit := Num mod 10;
      Num := Num div 10;
      Inc(cntA[OneDigit]);
  end;
  HasThreeSimuliarDigits := false;
  for i:=0 to 9 do 
    if cntA[i] = 3 then begin
      HasThreeSimuliarDigits := true;
      Exit;
    end;        
end;  

var
  n,k,i : integer;
begin
  WriteLn('Введите диапазон (числа n k)');
  ReadLn(n,k);
  for i:=n to k do
     if HasThreeSimuliarDigits(i) then WriteLn(i:4)
end.
p.s. проверки на то, что число 4-х значное в данном примере нет! Нужна проверка - добавляйте сами.
Для простоты подскажу,
4-х значные числа это числа >=1000 и <=9999
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2009, 13:54   #4
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

Код:
program Numbers;
var n,m,a,b,c,d,i: integer;
begin
ReadLn(n,m);
for i:= n to m do
begin
 a:= i div 1000;
 b:= i div 100 mod 10;
 c:= i mod 100 div 10;
 d:= i mod 100 mod 10;
 if (a=b) and (a=c) and (b=c)
 or (a=b) and (a=d) and (b=d)
 or (a=c) and (c=d) and (a=d)
 or (b=c) and (c=d) and (b=d) then WriteLn(i);
 end;
 ReadLn;
 end.
Аналогично, проверки на разряд числа нет.
Кто бы ты ни был - не думай о себе слишком (с)

Последний раз редактировалось DM_bite; 25.04.2009 в 14:01.
DM_bite вне форума Ответить с цитированием
Старый 25.04.2009, 14:48   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

DM_bite, ну, а мне мой вариант больше нравится. своей универсальностью (он же и для многозначных чисел уже правильно работает)

Кстати, в реализациях моей и Вашей есть одно принципиальное отличие (ну кроме способа решения, конечно).
у меня считаются числа СТРОГО имеющие три повтора. т.е. числа, где цифра повторяется 4-ре раза (например, 5555) не является решением задачи.
В Вашем случае, такое число так же является ответом.

Как правильно = не знаю. Если правильно учитывать такие числа, тогда в моём код надо равенство cntA[i] = 3 заменить на cntA[i] >= 3
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2009, 14:52   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Написано
Цитата:
содержит три одинаковых цифры.
а не "не менее 3х цифр", поэтому, придерживаясь правил логики, правильно только ровно 3 цифры.
puporev вне форума Ответить с цитированием
Старый 25.04.2009, 20:05   #7
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

Цитата:
DM_bite, ну, а мне мой вариант больше нравится. своей универсальностью (он же и для многозначных чисел уже правильно работает)

Кстати, в реализациях моей и Вашей есть одно принципиальное отличие (ну кроме способа решения, конечно).
у меня считаются числа СТРОГО имеющие три повтора. т.е. числа, где цифра повторяется 4-ре раза (например, 5555) не является решением задачи.
В Вашем случае, такое число так же является ответом.
Согласен, у вас универсальный способ.Относительно моего способа, можно проверять на неравенство четвертой цифры трем остальным и тогда все получиться.( только громоздко будет)
Кто бы ты ни был - не думай о себе слишком (с)
DM_bite вне форума Ответить с цитированием
Старый 26.04.2009, 15:06   #8
_°PROTOS°_
 
Аватар для _°PROTOS°_
 
Регистрация: 25.04.2009
Сообщений: 8
По умолчанию

Всем огромное спасибо....
_°PROTOS°_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа в паскале Krjak Помощь студентам 2 15.10.2008 21:56
SOS .Решите пожалуйста задачу на Паскале miron Помощь студентам 8 27.03.2008 15:32
программа в Паскале vitekbest Помощь студентам 4 17.12.2007 08:33
ПОМОГИТЕ ПОЖАЛУЙСТА SOS! ПРОЦЕДУРЫ В ПАСКАЛЕ! Jondeer Помощь студентам 0 04.12.2007 18:51