1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29

Числа в Фибоначчиевой сс

28.03.2012, 17:52. Показов 3819. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста!!! Как можно за О(1) (ну хотя бы не переводя число в ФСС) узнать есть единичка на конце числа в ФСС. Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2012, 17:52
Ответы с готовыми решениями:

Реализация фибоначчиевой кучи для оптимизации алгоритма Дейкстры
Это реализация фибоначивей кучи для оптимизации алгоритма Дейкстры, единственную реализацию нашел на плюсах, помогите перевести на Си,...

Перевод чисел между Фибоначчиевой и десятичной системами счисления
Ребят - выручайте) - надо написать программу В понедельник надо курсовую сдавать, а я даже понятия не имею, как такую программу написать:...

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми. ...

34
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 21:37
Студворк — интернет-сервис помощи студентам
Что интересно(может пока просто совпадение), в каждом секторе(участке между двумя фиб. числами.) количество чисел с последним битом равно сумме двух предыдущих секторов, т.е. опять возвращаемся к числам фибоначчи. Но, повторюсь, возможно это просто совпадение.

Добавлено через 54 секунды
Bek$, нет, я просто прибавляю к числу единицу. Это не разложение, я просто на основе выдаваемых данных пытаюсь найти закономерность.
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 21:41  [ТС]
soon, нужно постараться придумать обоснование вашему утверждению. Если оно действительно верно, то моя программа сводится к нахождению N-го члена Фибоначчи)
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 21:42
Bek$, не все так просто. Я говорил про количество, но сами числа отличаются на 2 или 3, причем я пока не могу найти адекватную закономерность.
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 21:47  [ТС]
До 50 моя прога выдает так: 1 4 6 9 12 14 17 19 22 25 27 30 33 35 38 40 43 46 48
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 21:49
50 мало, вы 500 к примеру рассматривайте. Причем рассматривайте не сами числа, а разность между двумя соседними. Ну, по крайней мере, я так делаю
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 21:51  [ТС]
... 61 64 67 69
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 21:52
Или, как вариант, эти числа в двоичном коде.
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 21:54  [ТС]
их много... Мне кажется, в этой последовательности 2 и 3 есть очевидная закономерность)
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 22:01
Она наверняка очень очевидна, раз мы ее не замечаем

Ладно, все, больше не оффтоплю.
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 22:01  [ТС]
Мои наблюдения -
1) Никакие 2 двойки рядом не стоят
2) Нет больше 3-х троек идущих подряд
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 22:09
Двойка прибавляется к числу, последние биты которого = 0101

Добавлено через 43 секунды
В фибоначчевой, разумеется
1
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
28.03.2012, 22:12  [ТС]
хммм... А это мысль! Но это опять в ФСС переводить
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 22:34
Ничего в голову не шло, добавил класс четверичной системы счисления(а вдруг). Подумываю над троичной. Но это завтра. Вот последний вариант, компилился с поддержкой c++11.
C++
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
////////////////////////////////////////////////////////////////////////////////
class Number
{
protected:
    std::string num;
 
public:
    virtual ~Number()
    {
        //std::cerr << "Number~" << std::endl;
    }
    //reference
    friend std::ostream& operator << (std::ostream& stream, Number& n)
    {
        stream << n.num;
        return stream;
    }
    //rvalue reference
    friend std::ostream& operator << (std::ostream& stream, Number&& n)
    {
        stream << n.num;
        return stream;
    }
};
////////////////////////////////////////////////////////////////////////////////
class FibBin: public Number
{
    void addBit()
    {
        std::fill(num.begin(), num.end(), '0');
        num = "1" + num;
    }
 
public:
    FibBin(): Number()
    {
        num = "1";
    }
    //--------------------------------------------------------------------------
    FibBin& operator ++ ()
    {
        for
        (
            auto it = num.rbegin();
            it != num.rend();
            ++it
        )
        {
            if(*it == '1')
            {
                if(it + 1 == num.rend())
                {
                    addBit();
                    return *this;
                }
            }
            else if(*it == '0')
            {
                if(*(it + 1) == '0')
                {
                    std::fill(num.rbegin(), it, '0');
                    *it = '1';
                    return *this;
                }
            }
        }
        std::cerr << "something has happend" << std::endl;
    }
    //--------------------------------------------------------------------------
    const bool lastBit() const
    {
        return *num.rbegin() == '1';
    }
 
    /*friend std::ostream& operator << (std::ostream& stream, FibBin& fb)
    {
        stream << fb.num;
        return stream;
    }*/
};
////////////////////////////////////////////////////////////////////////////////
class Bin: public Number
{
public:
    Bin(unsigned n): Number()
    {
        num = "";
        while(n)
        {
            num = std::to_string(n & 1) + num;
            n >>= 1;
        }
    }
 
    /*friend std::ostream& operator << (std::ostream& stream, Bin&& b)
    {
        stream << b.num;
        return stream;
    }*/
};
////////////////////////////////////////////////////////////////////////////////
class Quat: public Number
{
public:
    Quat(unsigned n): Number()
    {
        num = "";
        while(n)
        {
            num = std::to_string(n & 3) + num;
            n >>= 2;
        }
    }
 
    /*friend std::ostream& operator << (std::ostream& stream, Quat&& q)
    {
        stream << q.num;
        return stream;
    }*/
};
////////////////////////////////////////////////////////////////////////////////
void func(int n)
{
    FibBin fb;
    std::cout << 1 << std::setw(16) << fb << std::endl;
    int last = 1;
    for(int i = 2; i <= n; ++i)
    {
        ++fb;
        if(fb.lastBit())
        {
            //if(i - last == 3)
            //    std::cout << std::endl;
            std::cout << i << '\t' << Bin(i) << '\t' << Quat(i) << '\t' << fb << ' ' << i - last << std::endl;
            last = i;
        }
    }
}
 
int main()
{
    func(500);
    //std::cout << std::endl;
    return 0;
}
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.03.2012, 03:14
Bek$, ссылку на задачу можете дать?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.03.2012, 18:12
Нашел. Все они повторяются через 1000. Т.е пока что минимальный алгоритм таков - a % 1000 и проверяете на последний бит.
C++
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
////////////////////////////////////////////////////////////////////////////////
class Number
{
protected:
    std::string num;
 
public:
    Number(): num("")
    {
 
    }
    //--------------------------------------------------------------------------
    virtual ~Number()
    {
        //std::cerr << "Number~" << std::endl;
    }
    //reference
    friend std::ostream& operator << (std::ostream& stream, Number& n)
    {
        stream << n.num;
        return stream;
    }
    //rvalue reference
    /*
    friend std::ostream& operator << (std::ostream& stream, Number&& n)
    {
        stream << n.num;
        return stream;
    }
    */
};
////////////////////////////////////////////////////////////////////////////////
class FibBin: public Number
{
    void addBit()
    {
        std::fill(num.begin(), num.end(), '0');
        num = "1" + num;
    }
 
public:
    FibBin(): Number()
    {
        num = "1";
    }
    //--------------------------------------------------------------------------
    FibBin& operator ++ ()
    {
        for
        (
            std::string::reverse_iterator it = num.rbegin();
            it != num.rend();
            ++it
        )
        {
            if(*it == '1')
            {
                if(it + 1 == num.rend())
                {
                    addBit();
                    return *this;
                }
            }
            else if(*it == '0')
            {
                if(*(it + 1) == '0')
                {
                    std::fill(num.rbegin(), it, '0');
                    *it = '1';
                    return *this;
                }
            }
        }
        std::cerr << "something has happend" << std::endl;
    }
    //--------------------------------------------------------------------------
    const bool lastBit() const
    {
        return *num.rbegin() == '1';
    }
};
////////////////////////////////////////////////////////////////////////////////
void func(int n)
{
    FibBin fb;
    std::cout << std::setw(4) << 1;
    for(int i = 2; i <= n; ++i)
    {
        ++fb;
        if(fb.lastBit())
            std::cout << std::setw(5) << i;
        if(!(i % 50))
            std::cout << std::endl;
    }
}
////////////////////////////////////////////////////////////////////////////////
int main()
{
    func(2000);
    return 0;
}
ps/ Убрал auto из кода, теперь можно компилить без с++11(если нет возможности)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2012, 18:12

В 2 поля ввести 2 числа и вывести все непарные числа больше первого числа и меньше второго
Нужно в 2 поля ввести 2 числа и вывести все непарные числа больше первого числа и меньше второго;

Получить из цифр числа четырехзначные числа, у которых цифры исходного числа идут в том же порядке
Задано натуральное трехзначное число. Получить из его цифр четырехзначные числа, у которых цифры исходного числа идут в том же порядке, но...

Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?
Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?

За 1 просмотр файла вывести сначала числа меньше а, потом числа из промежутка а b, затем, числа больше b
Дан файл с числами типа float, пользователь вводит 2 числа а и b, за 1 просмотр файла нужно вывести сначала числа меньше а, потом числа из...

Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции
Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru