0 / 0 / 0 Регистрация: 03.09.2015 Сообщений: 3 |
|
1 |
|
Найти алгоритм вычисления последовательности чисел03.09.2015, 15:41. Показов 3717. Ответов 4
Нужно найти алгоритм вычисления последовательности суммы чисел от числа a, при условии количества чисел в последовательности c, и условии что каждое последующее число в последовательности должно быть в два раза больше предыдущего числа. Пример: a=63 Нужно найти такую последовательность, например для: Помогите найти, вроде простенькая задача, но чет я голову уже себе сломал, заранее спасибо!
0 |
26 / 24 / 6 Регистрация: 15.08.2015 Сообщений: 165 Записей в блоге: 4 |
|
03.09.2015, 17:01 |
2 |
У вас а =1 при
1, 2, 4, 8, 16, 32 При а=63 данный ряд будет идти в обратную сторону, т.е. условие – двойное уменьшение. И ряд будет таким. 31, 15, 7, 3, 1, error
0 |
0 / 0 / 0 Регистрация: 03.09.2015 Сообщений: 3 |
|
03.09.2015, 17:37 [ТС] |
3 |
Я наверное плохо пояснил, Нужно найти последовательность при:
0 |
26 / 24 / 6 Регистрация: 15.08.2015 Сообщений: 165 Записей в блоге: 4 |
|
03.09.2015, 17:53 |
4 |
Сообщение было отмечено Andrey116 как решение Решение Есть некое условие: геометрическая прогрессия Х(n+1)=X(n)*2=X(1)*2^n
1 |
0 / 0 / 0 Регистрация: 03.09.2015 Сообщений: 3 |
|
03.09.2015, 18:48 [ТС] |
5 |
Спасибо! х(1) = 1000/31 = 32,258064516 х(1)+х(2)+х(3)+х(4)+х(5) = 1000
0 |
Напишите в комментариях к этой записи консольные приложения для решения этих задач, укажите также код задачи. Пример решения.
Внимание! Под делителями целого числа n (n > 1) в нижеследующих задачах следует понимать простые числа (в смысле основной теоремы арифметики, n не равно 1). Например: 12=2*2*3, 27 = 3*3*3, 205=5*41 (составные числа), 257=257 (простое число, без сомножителя 1). Если n=1, то считать, что один делитель = 1.
Решены задачи: 1-14, 19-20. Не решены: 14-18.
Задачи
W1.1. Дана непустая последовательность целых чисел, оканчивающаяся нулем. Найти:
а) сумму всех чисел последовательности;
б) количество всех чисел последовательности.
Пример решения.
W1.2. Дана непустая последовательность неотрицательных целых чисел, оканчивающаяся отрицательным числом. Найти среднее арифметическое всех чисел последовательности (без учета отрицательного числа).
W1.3. Дана последовательность из n вещественных чисел. Первое число в последовательности нечетное. Найти сумму всех идущих подряд в начале последовательности нечетных чисел. Условный оператор не использовать.
W1.4. Дана последовательность из n вещественных чисел, начинающаяся с отрицательного числа. Определить, какое количество отрицательных чисел записано в начале последовательности. Условный оператор не использовать.
W1.5. Дана последовательность целых чисел a1, a2, …, a30, в начале которой записано несколько равных между собой элементов. Определить количество таких элементов последовательности. Условный оператор не использовать.
W1.6. Дана последовательность вещественных чисел a1, a2, …, a40, упорядоченная по возрастанию, и число n, не равное ни одному из чисел последовательности и такое, что a1< n<a40 .
а) Определить сумму чисел последовательности, меньших n.
б) Найти два элемента последовательности (их порядковые номера и значение) в интервале, между которыми находится значение n.
Примечание. В обеих задачах условный оператор не использовать.
W1.7. Дана непустая последовательность положительных целых чисел a1, a2, …, оканчивающаяся нулем. Получить a1, a1 · a2, a1 · a2 · a3, …, 0.
W1.8. Дано число n. Из чисел 1, 4, 9, 16, 25, … напечатать те, которые не превышают n.
W1.9. Среди чисел 1, 4, 9, 16, 25, … найти первое число, большее n.
W1.10. Дано число n.
а) Напечатать те натуральные числа, квадрат которых не превышает n.
б) Найти первое натуральное число, квадрат которого больше n.
W1.11. Дано число а (1 < а <= 1,5). Из чисел 1 + 1/2 , 1 + 1/3 , … напечатать те, которые не меньше а.
W1.12. Дано число а (1 < а <= 1,5). Среди чисел 1 + 1/2 , 1 + 1/3 , … найти первое, меньшее а.
W1.13. Рассмотрим последовательность чисел: 1+1/2, 1+1/3, … , 1+1/n. Напечатать все значения n, при которых все числа последовательности будут не меньше а (1 < а <= 1,5).
W1.14. Дано число а (1 < а <= 1.5). Найти такое наименьшее n, что в последовательности чисел 1+1/2 , 1+1/3 , …, 1+1/n последнее число будет меньше а.
W1.15. Даны вещественные числа а и b (1 < a < 1.5, 1 < b < 1.5, a < b). Из чисел 1, 1+1/2 , 1+1/3 , …, напечатать те числа c, для которых выполняется условие а < c < b.
W1.16. Среди чисел 1, 1+1/2 , 1+1/2+1/3 , … найти первое, большее числа a, причем 4 < a < 6.
W1.17. Дано вещественное число а (2 < a < 5). Напечатать все значения n, при которых (1 + 1/2 + 1/3 + … + 1/n) < a.
W1.18. Дано вещественное число а (9 < a < 10). Найти такое наименьшее n, что 1 +1/2 + 1/3 +…+ 1/n > a.
W1.19. Рассмотрим последовательность, образованную дробями: 1/1, 2/1, 3/2, …, в которой числитель (знаменатель) следующего члена последовательности получается сложением числителей (знаменателей) двух предыдущих членов. Числители двух первых дробей равны 1 и 2, знаменатели — 1 и 1. Найти первый член такой последовательности, который отличается от предыдущего члена не более чем на 0,001.
W1.20. Последовательность Фибоначчи образуется так: первый и второй члены последовательности равны 1, каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, …). Найти:
а) первое число в последовательности Фибоначчи, большее n (значение n вводится с клавиатуры; n > 1);
б) сумму всех чисел в последовательности Фибоначчи, которые не превосходят 1000.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Помощь проекту:
С тех пор, как я начал программировать, мне было любопытно. Но мне кажется слишком сложным даже попытать.
Мне бы хотелось увидеть решение.
1, 2, 3, 4, 5 // returns 6 (n + 1)
10, 20, 30, 40, 50 //returns 60 (n + 10)
10, 17, 31, 59, 115 //returns 227 ((n * 2) - 3)
Ответ 1
То, что вы хотите сделать, называется полиномиальной интерполяцией. Существует много методов (см. http://en.wikipedia.org/wiki/Polynomial_interpolation), но вы должны иметь верхнюю границу U от степени полинома и не менее U + 1.
Если у вас есть последовательные значения, тогда есть простой алгоритм.
Учитывая последовательность x1, x2, x3,…, пусть Delta (x) – последовательность разностей x2 – x1, x3 – x2, x4 – x3,…. Если у вас есть последовательные значения полинома степени n, то n-я итерация Delta является постоянной последовательностью.
Например, многочлен n ^ 3:
1, 8, 27, 64, 125, 216, ...
7, 19, 37, 61, 91, ...
12, 18, 24, 30, ...
6, 6, 6, ...
Чтобы получить следующее значение, заполните еще 6, а затем вернитесь назад.
6, 6, 6, 6 = 6, ...
12, 18, 24, 30, 36 = 30 + 6, ...
7, 19, 37, 61, 91, 127 = 91 + 36, ...
1, 8, 27, 64, 125, 216, 343 = 216 + 127, ...
Ограничение количества вышеперечисленных значений гарантирует, что ваша последовательность никогда не станет пустой при выполнении различий.
Ответ 2
Извините, что разочаровал, но это не совсем возможно (в общем), так как существует бесконечное количество последовательностей для любых заданных значений k
. Может быть, с определенными ограничениями.
Вы можете посмотреть этот Everything2 post, который указывает на полином Лагранжа.
Ответ 3
Формально нет однозначного следующего значения для частичной последовательности. Проблема, как обычно понимается, может быть четко сформулирована как:
Предположим, что представленная частичная последовательность просто достаточна для ограничения некоторого правила генерации, вывести самое простое возможное правило и показать следующее генерируемое значение.
Проблема включает значение “простейшего” и, следовательно, не очень хорошо подходит для алгоритмических решений. Это можно сделать, если ограничить проблему определенным классом функциональных форм для правила генерации, но детали зависят от форм, которые вы готовы принять.
Ответ 4
В книге Numericical Recipes есть страницы и страницы реальных практических алгоритмов для такого рода вещей. Это стоит того, чтобы прочитать!
Первые два случая легко:
>>> seq1 = [1, 2, 3, 4, 5]
>>> seq2 = [10, 20, 30, 40, 50]
>>> def next(seq):
... m = (seq[1] - seq[0])/(1-0)
... b = seq[0] - m * 0
... return m*len(seq) + b
>>> next(seq1)
6
>>> next(seq2)
60
Третий случай потребует решения для нелинейной функции.
Ответ 5
Мне нравится идея, и одна и две последовательности кажутся мне возможной, но тогда вы не можете обобщить, так как последовательность может полностью покинуть базу. Ответ, вероятно, заключается в том, что вы не можете обобщить, что вы можете сделать, это написать алгоритм для выполнения определенной последовательности, зная (n + 1) или (2n + 2) и т.д….
Одна вещь, которую вы можете сделать, – это различие между элементом я и элементом я + 1 и элементом я + 2.
например, в третьем примере:
10 17 31 59 115
Разница между 17 и 10 равна 7, а разница между 31 и 17 равна 14, а разница между 59 и 31 составляет 28, а разница между 115 и 59 составляет 56.
Итак, вы заметили, что он становится элементом я + 1 = я + (7 * 2 ^ n).
So 17 = 10 + (7 * 2 ^ 0)
И 31 = 17 + (7 * 2 ^ 1)
И так далее…
Ответ 6
Вы можете попытаться использовать экстраполяция. Это поможет вам найти формулы для описания данной последовательности.
Извините, я не могу сказать вам больше, так как мое математическое образование произошло совсем недавно. Но вы должны найти больше информации в хороших книгах.
Ответ 7
Такие серии номеров часто являются частью “тестов интеллекта”, что заставляет меня думать, что в терминах такого алгоритма есть нечто, проходящее (по крайней мере, часть) “Тест Тьюринга” , чего трудно добиться.
Ответ 8
Для произвольной функции это не может быть сделано, но для линейной функции, такой как в каждом из ваших примеров, достаточно просто.
У вас есть f(n+1) = a*f(n) + b
, и проблема заключается в поиске a
и b
.
Учитывая как минимум три члена последовательности, вы можете сделать это (вам нужно три, потому что у вас есть три неизвестных – начальная точка, a
и b
). Например, предположим, что у вас есть f(0)
, f(1)
и f(2)
.
Мы можем решить уравнения:
f(1) = a*f(0) + b
f(2) = a*f(1) + b
Решение для:
a = (f(2)-f(1))/(f(1)-f(0))
b = f(1) - f(0)*(f(2)-f(1))/(f(1)-f(0))
(Вам нужно отдельно решить случай, когда f(0) = f(1)
, чтобы избежать деления на ноль.)
Как только у вас есть a
и b
, вы можете повторно применить формулу к исходному значению, чтобы сгенерировать любой член в последовательности.
Можно также написать более общую процедуру, которая работает при задании любых трех точек в последовательности (например, 4, 7, 23 или что-то еще)., это простой пример.
Опять же, мы должны были сделать некоторые предположения о том, какая форма будет иметь наше решение., в этом случае считая его линейным, как в вашем примере. Можно считать, что это более общий полином, например, но в этом случае вам нужно больше членов последовательности для поиска решения в зависимости от степени полинома.
Ответ 9
См. также главу “Искать, когда приходит последовательность” из книги “Концепции жидкости и творческие аналоги: компьютерные модели фундаментальных механизмов мышления” Дугласа Хофстадтера
http://portal.acm.org/citation.cfm?id=218753.218755&coll=GUIDE&dl=GUIDE&CFID=80584820&CFTOKEN=18842417
Рассмотрим алгоритмы для обработки числовых последовательностей: поиск, проверка условий (максимум, минимум).
Для последовательностей характерно, что в каждый момент времени нам доступен только один элемент последовательности. Поэтому все алгоритмы строятся с учетом однократного последовательного просмотра.
На этом уроке рассмотрим несколько программ на языке программирования Паскаль. В каждой из них одновременно рассматривается только очередной элемент последовательности, без учета остальных (массивы не используются). Алгоритиы для решения таких задач называются алгоритмами с линейным поиском.
Пример 1. Вводится последовательность из N целых чисел. Найти сумму всех отрицательных чисел.
{
Переменные:
n - количество чисел;
i - переменная цикла;
x - очередное число;
sum - сумма отрицательных чисел.
}
program primer_1;
Var i,n,x,sum:integer;
Begin
Writeln('Введите длину последовательности N= ');
Readln(n);
Sum:=0;
For I:=1 to n do
Begin
Writeln('Введите ', i, '-ое число: ');
Readln(x);
if x < 0 then sum:=sum+x
end;
If sum = 0
then writeln('Отрицательных чисел нет.')
Else writeln('Сумма отрицательных чисел = ', sum);
End.
Пример 2. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить, сколько раз последовательность меняет знак.
{
Переменные:
old - предыдущее число;
new- обрабатываемое число;
k - количество смен знака ;
i - порядковый номер числа в последовательности.
}
program primer_2;
Var old, new: real;
k, i: integer;
Begin
Write('Введите первое число: ');
Readln(old);
Write('Введите второе число: ');
Readln(new);
k:=0;
i:=2;
Repeat
If new*old < 0 then k := k+1;
old:=new;
i:=i+1;
Write('Введите ',i, '-ое число:');
Readln(new);
Until new = 0;
If k > 0
then writeln('Последовательность меняет знак ',k,' раз')
else writeln('Последовательность не меняет знак ');
end.
Исходники можно скачать на Диске