Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29

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

28.03.2012, 17:52. Показов 3778. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru