Форум программистов, компьютерный форум CyberForum.ru

Фибонначчиев поиск - C++

Восстановить пароль Регистрация
 
Nikolai699
16 / 16 / 3
Регистрация: 15.03.2012
Сообщений: 105
22.05.2013, 12:43     Фибонначчиев поиск #1
отладить программу на си++ Фибоначчиева поиска ключей с меню ввода, меню выполнения и меню вывода.
Алгоритм:
K-ключ, который нужно найти;
i=Fn- число фибоначчи (текущее число фибоначчи), q и p - последовательные числа фибоначчи, q=Fn-2, p=Fn-1, n- кол-во ключей и чисел фибоначчи.
1) смотрим очередной i, если K<Ki, то переходим к пункту 2
если K>Ki, то переходим к пункту 3
если K=Ki, то переходим к пункту 4
2) если q=0, то перeходим к пункту 5
если q!=0? то i=i-q, заменяем p на q и q на p-q переходим к пункту 1
3) если p=1, то переходим к пункту 5
если p!=1, то i=i+q и p=p-q, и q=q-p и переходим к пункту 1
4) алгоритм заканчивается удачно
5) алгоритм заканчивается неудачно
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
#include<iostream>
using namespace std;
 
int main() {
    int K[19] = {0, 3, 5, 8, 9, 11, 14, 15, 19, 21, 22, 28, 33, 35, 37, 42, 45, 48, 52};
    int const N = 10;
    int f[N], k, flag = 0, i, p, q, Key = 12;
    if (N == 1)
        f[1] = 1;
    if(N !=0 || N > 0){
        f[1] = 1;
        f[2] = 1;
        for(k = 3; k <= N ; k++){
            f[k] = f[k - 1] + f[k - 2];
        }
    }
    for(k = 1; k <= N ; k++)
        cout << f[k] << " " << endl;
    cout << "\n";
    
    i = f[1];
    p = f[k - 1];
    q = f[k - 2];
    cout << i << " " << p << " " << q << " "<<endl;
    while(1){
        if(flag == 1){
            cout << "not found =( ";
            break;
        }
        if(Key == K[i]){
            cout << "element naiden!!!yra!!!" ;break;
        }
        if(Key < K[i]){
            if(q == 0){
                flag = 1;
            }
            else
            {
                i = i - q;
                p = q;
                q = p - q;
            }
        }
        if(Key > K[i]){
            if(p == 1){
                flag = 1;
            }
            else
            {
                i = i + q;
                p = p - q;
                q = q - p;
            }
        }
    }
}
вот то что получилось, но не совсем работает, помогите доделать)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 12:43     Фибонначчиев поиск
Посмотрите здесь:

C++ Поиск. Последовательный поиск
C++ Поиск. Бинарный поиск
Поиск циклов в графе. Поиск центра взвешенного графа C++
C++ Поиск символа не могу переделать под поиск сочетания символов
Поиск пикселя и поиск изображения на экране C++
Поиск числа в двумерном массиве (бинарный поиск) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru