fixfix
2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Получить единичку из любого натурального числа
Сообщение24.09.2012, 12:37 
Аватара пользователя


01/12/11

8634
С десятичной записью натурального числа разрешается проделывать следующую операцию: выбрать две соседние цифры $d$ и $d'$ (причём $d$ стоит слева от $d'$, а в качестве $d$ можно выбрать также нуль (например, число 1234 можно представить как 01234 и выбрать 0 и 1)), стереть их и записать на их месте число $d+2d'$.

Доказать, что посредством конечного числа таких операций можно из любого натурального числа получить единичку.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 14:03 


26/08/11
2147
Достаточно показать, что любое двуцифренное можно превратить в 01. Ну и по очереди убирать по циферку. Достаточно проверить друцифренных до 27. (ясно почему)
Значит:
27,16,13,07,14,09,18,17,15,11,03,06,12,05,10,01. Чего еще не было? 26
26,14 - было
25,12 -
24,10 красота
23,08,16
22,06
и т.д
Конечно, продолжать до 1 имеет смысл только когда останется двуцифренное число. Иначе любой старший 0 уменьшает разрядность.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 14:05 
Аватара пользователя


01/12/11

8634
Shadow, можно ещё чуть-чуть проще.

-- 24.09.2012, 14:07 --

Хотя, нет. У Вас тоже достаточно просто.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 14:24 


26/08/11
2147
Ktina в сообщении #622945 писал(а):
У Вас тоже достаточно просто
У меня даже тупо. Напишите красивое решение, а то остается впечатление, что задача из последей олимпиады специализированной школы. (для детей с частичной олигофрении "Павлик Морозов").

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 14:42 
Аватара пользователя


01/12/11

8634
Shadow в сообщении #622958 писал(а):
Ktina в сообщении #622945 писал(а):
У Вас тоже достаточно просто
У меня даже тупо. Напишите красивое решение, а то остается впечатление, что задача из последей олимпиады специализированной школы. (для детей с частичной олигофрении "Павлик Морозов").

Любое однозначное можно превратить в единичку:
2-4-8-16-13-7-14-9-18-17-15-11-3-6-12-5-10-1

Если число не однозначное и начинается с 19, то 019....--029....--020....--02....
Если же не начинается с 19, то тупо берём первые две цифры и производим разрешённую операцию. Полученное число всегда будет меньше исходного, а значит, рано или поздно станет однозначным.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 15:21 


26/08/11
2147
Так лучше. Мой перебор зациклит на 19 :cry:

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 19:41 


05/09/12
2587
Цитата:
Любое однозначное можно превратить в единичку:
2-4-8-16-13-7-14-9-18-17-15-11-3-6-12-5-10-1

Если число не однозначное и начинается с 19, то 019....--029....--020....--02....
Если же не начинается с 19, то тупо берём первые две цифры и производим разрешённую операцию. Полученное число всегда будет меньше исходного, а значит, рано или поздно станет однозначным.
Мое решение такое же, за исключением последнего утверждения. Если начинается не с 1 - добавляем незначащий ноль и превращаем бывший первый значащий разряд в 1. Если далее 2 разряда получается 19 - действуем как написала Ktina - избавляемся от 9-ки, если не 19 - любое 1d при d <> 9 превращается в однозначное число (можно показать, проверив с 10 по 18), которое затем превращаем в единичку.

ЗЫ нелишне заметить, что при данной операции превращения мы никогда не получим ноль из ненулевого исходного числа, а то утверждение было бы неверно.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение24.09.2012, 20:56 
Аватара пользователя


01/12/11

8634
_Ivana в сообщении #623082 писал(а):

ЗЫ нелишне заметить, что при данной операции превращения мы никогда не получим ноль из ненулевого исходного числа, а то утверждение было бы неверно.

Обобщая, можно сказать, что множество $\mathbb N$ замкнуто относительно операции, описанной в условии данной задачи. На этом и строится решение. Любое >1 значное можно уменьшить, а из любого однозначного сделать единичку. Если бы мы имели выход за рамки множества $\mathbb N$, этого было бы не достаточно, так как уменьшая число, являющееся более, чем однозначным, теоретически можно было "перескочить" через однозначные числа.

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение25.09.2012, 10:36 


05/09/12
2587

(Оффтоп)


 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение25.09.2012, 17:08 


05/09/12
2587

(Оффтоп)


 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение25.09.2012, 18:06 


26/08/11
2147
А так быстрее
Код:
  49794591
  22794591
   6794591
   2094591
    294591
    204591
     24591
     10591
      1591
      1191
       391
       211
        41
         6
        12
         5
        10
         1

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение25.09.2012, 19:22 


05/09/12
2587
Цитата:
А так быстрее
Вы правы. Но я не оптимизировал свой алгоритм ни в смысле минимизации количества шагов преобразований исходного числа, ни в смысле минимизации объема кода или требуемого объема ОЗУ при выполнении. Я просто реализовал гарантированный простой алгоритм, который придумал. Или Вы предлагаете поставить и решить в общем виде задачу минимизации алгоритма по какому-либо из вышеназванных критериев?

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение25.09.2012, 21:36 


26/08/11
2147
В общем виде не берусь, но в любом случае, отусутствие лишнего условия улучшит алгоритм как
_Ivana в сообщении #623387 писал(а):
в смысле минимизации количества шагов преобразований исходного числа
так и
_Ivana в сообщении #623387 писал(а):
в смысле минимизации объема кода

 Профиль  
                  
 
 Re: Получить единичку из любого натурального числа
Сообщение26.09.2012, 13:35 


05/09/12
2587
Уговорили, оптимизировал :-)
UPD, исправил ошибку
Код:
function Ivana_int2one_1(int, hist)

if int == 1
    hist
    return
   
elseif int > 9
    str = num2str(int);
    dd = str2num(str(1:2));
    str(1:2) = [];

    while dd > 9
        if dd == 19
            dd = 29;
        else
            dd = fix(dd/10) + 2*mod(dd, 10);
        end
        int = str2num([num2str(dd), str]); hist = [hist, int];
    end
   
else
    while int ~= 1
        int = fix(int/10) + 2*mod(int, 10); hist = [hist, int];
    end
   
end
Ivana_int2one_1(int, hist);

Код:
    49794591    22794591     6794591     2094591      294591      204591       24591       10591
        1591        1191         391         211          41           6          12           5
          10           1

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group