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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2016, 22:08   #1
Sandakan01
 
Регистрация: 20.04.2015
Сообщений: 6
По умолчанию Натуральное число называется двояким

Натуральное число называется двояким, если в его десятичной записи встречается не более двух различных цифр. Например, числа 3, 23, 33, 100, 12121 - двоякие, а числа 123 и 9980 - нет.

Для заданного натурального числа N требуется найти ближайшее к нему двоякое число

Помогите пожалуйста

Последний раз редактировалось Sandakan01; 20.03.2016 в 22:46.
Sandakan01 вне форума Ответить с цитированием
Старый 21.03.2016, 07:04   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Код:
procedure My(Num: Integer);
var
  Str: String;
  i, cnt: integer;
begin

  cnt := 0;
  Str := IntToStr(Num);
  for i := 0 to 9 do
    begin
      if Pos(IntToStr(i), Str) > 0 then
        Inc(cnt);
    
      if cnt > 2 then
        Break;
    end;

   if cnt > 2 then
      ShowMessage('Число ' + Str + ' не двоякое')
   else
      ShowMessage('Число ' + Str + ' двоякое');
    

end;
igh0st вне форума Ответить с цитированием
Старый 21.03.2016, 08:11   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

igh0st, отлично.

автору темы осталось превратить этот код в функцию (сделать возврат true или false вместо ShowMessage) и добавить вызов данной функции в цикле, пока число не станет двояким (только в цикле нужно делать так
Код:
Num1:=num;
Num2:=num;
while not My(Num1) and Not My(Num2) do begin
  Inc(Num1);
  Dec(Num2);
end;
if My(Num1) then // ближайшее Num1
else // ближайшее Num2
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2016, 08:13   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Можно ж быстрее причём намного
Смотреть на первые два числа а остальные забивать ими смотря больше или меньше само число
Poma][a вне форума Ответить с цитированием
Старый 21.03.2016, 10:21   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен! я тоже уверен, что алгоритм с перебором "в лоб" далеко не самый эффективный.
но зато он простой, понятный и надёжный!

Все прочие требуют дополнительных танцев и проверок.
вот, допустим, есть число 20999 ближайшее к нему 21111
как поможет "Смотреть на первые два числа" ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2016, 10:29   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Видим 20 - пытаемся докопаться сколько ж надо операций. Для этого забиваем все в виде 20222. Дальше вычитаем (наверное).
Потом увеличиваем второе число. Снова считаем
Потом уменьшаем его. И так для всех состояний. Получится 3^2. Фигня ж.
Но еще будет интересно что будет при 22999
Тут стоит рассмотреть отделельно. Мол дойти до первой не нашей цифры а дальше изменять только ее. Конец
Poma][a вне форума Ответить с цитированием
Старый 21.03.2016, 11:02   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Совсем интересно для 399999 -> 400000. Скорее всего цикл с получением двух чисел путем прибавления и вычитания единицы из исходного и проверкой результата на эту, как её, двоякость
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.03.2016 в 11:05.
Аватар вне форума Ответить с цитированием
Старый 21.03.2016, 11:34   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
Скорее всего цикл с получением двух чисел путем прибавления и вычитания единицы из исходного и проверкой результата на эту, как её, двоякость
дык, пост №3 как раз это и реализует.

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

Последний раз редактировалось Serge_Bliznykov; 21.03.2016 в 11:37.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2016, 11:39   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ага, проглядел. Сомневаюсь, что достаточно просто можно реализовать более оптимальным способом. Или вообще можно.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.03.2016, 11:58   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ага, проглядел. Сомневаюсь, что достаточно просто можно реализовать более оптимальным способом. Или вообще можно.
Вот интересно.
с одной стороны, чувствую, что задача имеет более эффективное решение, чем банальный перебор с плюсом/минусом.
с другой - не вижу этого алгоритма.
Поэтому, за неимением лучшего варианта, я бы сейчас остановился на тупом цикле.
Возможно, что задача не имеет другого решения, несмотря на кажущуюся простоту.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задано натуральное число N. Найти наименьшее и наибольшее число, состоящее из тех же цифр и в таком же количестве, что и N dimon_snake Паскаль, Turbo Pascal, PascalABC.NET 9 17.11.2015 23:38
Даны вещественное число a и натуральное число n. Вычислить S Dimaska931 Паскаль, Turbo Pascal, PascalABC.NET 6 28.11.2012 12:09
Даны действительное число a, натуральное число n. Вычис- лить: Petrovich83 Помощь студентам 1 09.04.2011 11:30
даны действительное число а, натуральное число n [Паскаль] Анна22 Помощь студентам 2 07.12.2010 20:31
Натуральное число, в записи которого п цифр, называется числом Армстронга, если сумма его цифр, возведенн OTLi4HO Общие вопросы C/C++ 6 14.01.2009 19:48