Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Заблокирован
1

Для каждого числа определить число шагов которые надо сделать, чтобы это число обратить в единицу

28.08.2014, 17:43. Показов 1741. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Числовая последовательность определяется следующим способом.
Для каждого натурального числа определяется число шагов (операций)
которые надо сделать, чтобы это число обратить в единицу.
Алгоритм такой:
1. Если число делится на 3, то надо разделить
2. В противном случае вычесть 1.
3. Перейти к пункту 1.
Задача состоит в том, чтобы написать программу, такую что
по заданному числу шагов программа находила (выдавала)
Наименьшее число соответствующее этому числу шагов.
Задача нестандартная, а потому интересная.
Кое-что удалось сделать, а в целом я ещё не решил.
Первые члены этой последовательности таковы:
1, 2, 4, 5, 8, 14, 17, 26, 44, 53, 80, ...
Удалось также определить, что каждый третий член этой
последовательности вычисляется по формуле:
2*3n-1, где n=0, 1, 2, .... тогда k=3n,
где k - число шагов. Отсюда видно, что эта
последовательность растёт как экспонента,
но далее дело не сдвинулось. Тогда я написал
программу (она перед вами), позволяющую вычислить 41 член
это последовательности (решение в лоб) - прямой перебор.
А что делать дальше??
Аналитически задача не решается.
Неужели вот так и считать сутки, а потом собрать все данные
в массив ?? Может есть иное, более короткое решение??
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
program O;
uses crt;
var
   i,j,k: longint;
   a: array[0..41] of longint;
label 100;
 
begin
   a[0]:= 1;
   a[1]:= 2;
   a[2]:= 4;
   a[3]:= 5;
   a[4]:= 8;
   clrscr;
   for i:= 5 to 41 do a[i]:= 0;
   for i:= 8 to 8000000 do
      begin
         j:= i;
         k:= 0;
100:
         if j mod 3 = 0 then
            j:= j div 3
         else
            j:= j - 1;
         k:= k + 1;
 
         if j > 1 then goto 100;
 
         if a[k] = 0 THEN
            a[k]:= i
         else if a[k] > i THEN
            a[k]:= i
      end;
 
   for k:= 0 to 41 do
      begin
         if k < 24 then
            begin
               GoToXY(2,k+1);write(k);
               GoToXY(12,k+1);write(a[k])
            end
         else
            begin
               GoToXY(22,k-23);write(k);
               GoToXY(32,k-23);write(a[k])
            end
      end
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2014, 17:43
Ответы с готовыми решениями:

Для любого заданного числа определить число шагов до получения палиндрома.
Натуральное число называется палиндромом, если он одинаково читается с обеих сторон. Возьмем любое...

Определить, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N
Калькулятор выполняет 3 операции: Прибавить к числу единицу. Умножить число на 2. Умножить число...

В ответ на введенное число от 0 до 10 выдать сообщение четное это число или нет. То же число для любого целого числа ≤100
В ответ на введенное число от 0 до 10 выдать сообщение четное это число или нет. То же число для...

С клавиатуры вводится двухзначное число. Выведите на экран это число, приписав к нему в конце единицу
помогите пожалуйста с алгоритмом.

10
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.08.2014, 18:15 2
Удален ошибочный код.
0
Заблокирован
28.08.2014, 18:18  [ТС] 3
Последовательность состоит не из всех чисел, а как сказано в
условии, из НАИМЕНЬШИХ чисел.
Простой пример:
Число 2 превращается в 1 за 1 шаг
Число 3 также за 1 шаг.
Так вот в последовательность попадает 2, а Не 3
Точно также обстоит дело и с другими числами.
С уважением к Вам
hoch
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.08.2014, 18:28 4
Понял, удаляю свои изыскания.
0
Заблокирован
16.09.2014, 12:32  [ТС] 5
Вообщем эта программа должна работать так, как я написал.
Тут куча вопросов.
1. Мне не удалось запихнуть в массив много данных.
Компилятор сообщил: слишком длинная строка. Пришлось все урезать.
2. Вопрос: А нельзя ли этот массив удлинить?
3. Или перенести все на несколько строк?
4. Или можно заполнять по одному элементу?
5. Или без файла не обойтись?
6. Что вообще можно?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses crt;
const
a: array[0..24] of longint = (1,2,4,5,8,14,17,26,44,53,80,134,161,242,404,485,728,1214,1457,2186,3644,4373,6560,10934,13121);
var
   k: integer;
 
begin
   clrscr;
   repeat
      writeln('K = ?');
      readln(k)
   until k < 25;
 
   writeln(a[k]);
   readln
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
16.09.2014, 13:25 6
hoch,
можно всё, тут не Бейсик, конец строки не имеет никакого синтаксического значения, кроме того, что это "пробельный" символ.
Pascal
1
2
3
4
a: array[0..24] of longint = (
  1, 2, 4, 5, 8, 14, 17,  26, 44, 53, {0-9}
  80, 134, 161, 242, 404, 485, 728, 1214, 1457, 2186, {10-19}
  3644, 4373, 6560, 10934, 13121 {20-24});
1
Заблокирован
16.09.2014, 13:45  [ТС] 7
Bormant. Спасибо! Это невероятно!
Это компилятор оказывается ленивый!
Очень Вам благодарен!
Спасибо!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
16.09.2014, 13:54 8
Скорее не компилятор, а программист это ведь ему лень Enter жать в пределах первых 127 символов, о которых в документации компилятора честно написано.

Добавлено через 3 минуты
hoch,
Pascal
1
2
3
4
{ счастливой отладки }                                                                                        const True=False;
begin
  WriteLn(True);
end.
Что выведет программа?
1
Заблокирован
16.09.2014, 14:21  [ТС] 9
Bornant.
Я сначала предположил, что
1) будет сообщение: неизвестный идентификатор
2) или число 1 может -1
Но никак не ожидал True.
Придёт день, когда и я сумею Вам чей-нибудь помочь.
Спасибо!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
16.09.2014, 14:24 10
hoch, нет, вы просто не заметили "const True=False;" далеко справа.
Программа на самом деле
Pascal
1
2
3
4
{ счастливой отладки } const True=False;
begin
  WriteLn(True);
end.
и выводит она в обоих случаях, естественно, FALSE :-) Вот про это "легко не заметить" то, что далеко справа, и была речь.

PS. Если бы копировали текст, выделяя мышкой от финальной точки к началу, вставили в редактор, сохранили, откомпилировали и запустили, получилось бы намного забавнее. Но получилось как получилось.
Мораль: слишком длинные строки -- зло.
1
Заблокирован
16.09.2014, 14:35  [ТС] 11
Bormant,
Ещё раз Вам спасибо!
Каждый раз Вы дарите мне радость обретения новых знаний.
Удачи Вам!!
0
16.09.2014, 14:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2014, 14:35
Помогаю со студенческими работами здесь

как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c;
как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы...

Ввести число и систему счисления, в которой это число записано. Определить корректность введенного числа.
Задание:С клавиатуры пользователь ввел число и систему счисления, в которой это число записано....

Для каждого из массивов определить количество и сумму элементов, которые без остатка делятся на число В
Оч прошу о помощи! Задание такое: Заданы одномерные массивы Х(5) и Y(7). Для каждого из них...

Даны две очереди (или два стека). Определить число шагов, через которые одна из очередей станет пустой
Даны две очереди (или два стека). Определить число шагов, через которые одна из очередей станет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru