Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
___Alex___
0 / 0 / 0
Регистрация: 26.12.2011
Сообщений: 41
1

Сформировать массив B так чтобы в него вошли те элементы массива А, которые являются числами Фибоначи

08.08.2012, 09:48. Просмотров 2386. Ответов 5
Метки нет (Все метки)

в массиве А(55) лежат целые числа. Сформировать новый массив В таким образом чтобы в него вошли те элементы массива А, которые являются числами Фибоначи (1,2,3,5,8,13...)
пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 09:48
Ответы с готовыми решениями:

Сформировать массив B так, чтобы в него вошли элементы массива А, индексы которых являются простыми числами
В массиве А(55) лежат целые числа. Сформировать массив B таким образом, чтобы в него вошли те...

Сформировать массив B так, чтобы в него вошли элементы массива А, которые по модулю меньше числа 12
Доброго времени суток! Не могу исправить ошибки,помогите пожалуйста. В массиве С(57) лежат...

Сформировать новый массив B так, чтобы в него вошли те элементы массива A
В массиве A лежат целые числа. Сформировать новый массив B таким образом, чтобы в него вошли те...

Сформировать новый массив В таким образом, чтоб в него вошли те элементы массива А, которые по модулю меньше числа 12
В массиве С(57) лежат целые числа. Сформировать новый массив В таким образом, чтоб в него вошли те...

Сформировать массив из всех делителей числа, которые являются простыми числами
Помогите, пожалуйста, написать программу на языке С. Буду признателен за помощь. Вот условие: С...

5
golatin
282 / 240 / 53
Регистрация: 12.10.2011
Сообщений: 383
Завершенные тесты: 1
08.08.2012, 11:24 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Натуральное число N является числом Фибоначчи тогда и только тогда, когда http://www.cyberforum.ru/cgi-bin/latex.cgi?5{N}^{2}+4 или http://www.cyberforum.ru/cgi-bin/latex.cgi?5{N}^{2}-4 является квадратом.

Т.е. что-то такое:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int is_Fibbonachi(long N)
{
    if((sqrt(5*N*N+4)-(long)sqrt(5*N*N+4)==0)||(sqrt(5*N*N-4)-(long)sqrt(5*N*N-4)==0))
        return 1;
    return 0;
}
int main()
{
    int i=0;
    long a[10]={2,45,6,4,987,13,4,18,17,55};
    for(i=0;i<10;i++)
    {
        if(is_Fibbonachi(a[i]))
            printf("%ld - Fibbonachi\n",a[i]);
    }
 
    return 0;
}
1
Ataman
1 / 1 / 1
Регистрация: 27.10.2011
Сообщений: 33
08.08.2012, 23:39 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот еще другой вариант, обьемный код получился из за динамического массива. Можно вначале отсортировать массив "A" по возрастанию - более эффективнее будет выполнятся программа, тогда в цикле фор не нужно будет обновлять параметры a,b постоянно.

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
 
int main(){
    int A[N], *B, i, j=0;
    unsigned int a, b, empty=1;
 
    //random filling the array
    srand((unsigned int)time(0));
    for(i=0; i<N; i++) A[i]=rand()%89;
 
    if((B=(int*)malloc(sizeof(int)*1)) == NULL){
        printf("Memory allocation failed!\n");
        exit(1);
    }
 
    //finds fibonachi number and writes him into "B" array
    for(i=0; i<N; i++){
        a=1, b=2;
        if(A[i]==1 || A[i]==2){
            if(empty) B[j]=A[i];
            else{
                if((B=(int*)realloc(B,(sizeof(int)*(j+2)))) == NULL){
                    printf("Memory allocation failed!\n");
                    exit(1);
                }
                B[j]=A[i];
            }//else
            j++;
            empty=0;
        }
        while(A[i] >= (a+b)){
            if(A[i]==(a+b)){
                if(empty) B[j]=A[i];
                else{
                    if((B=(int*)realloc(B,(sizeof(int)*(j+1)))) == NULL){
                        printf("Memory allocation failed!\n");
                        exit(1);
                    }
                    B[j]=A[i];
                }//else
                j++;
                empty=0;
            }
            b+=a;
            a=b-a;
        }//while
    }//for
 
    //printing arrays
    printf("A: ");
    for(i=0; i<N; i++) printf("%d, ", A[i]);
    printf("\nB: ");
    for(i=0; i<j; i++) printf("%d, ", B[i]);
    printf("\n");
 
    free(B);
    return 0;
}//main
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
09.08.2012, 17:52 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от golatin Посмотреть сообщение
Натуральное число N является числом Фибоначчи тогда и только тогда...
Озадачился вопросом - только ли числа Фибоначчи соответствуют одной из двух зависимостей, сделал небольшой примерчик
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
 
int is_whole(double n){
    return ( n == floor(n) );
}
 
#define FIRST 1
#define LAST 1000
 
int main(void){
    int i;
    
    for ( i = FIRST; i <= LAST; ++i )
        if ( is_whole(sqrt(5.0 * i * i + 4.0)) || is_whole(sqrt(5.0 * i * i - 4.0)) )
            printf("%d\n", i);
    
    return 0;
}
результат:
Код
[andrew@andrew numbers]$ gcc -o like_fibonacci like_fibonacci.c -lm
[andrew@andrew numbers]$ ./like_fibonacci 
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
[andrew@andrew numbers]$
как по нотам
1
alkagolik
10.08.2012, 01:49
  #5

Не по теме:

easybudda, не комильфо, как же леммы, теоремы, индукция? http://www.cs.swan.ac.uk/~csulrich/ftp/PhilJames1008.pdf

1
easybudda
10.08.2012, 14:06     Сформировать массив B так чтобы в него вошли те элементы массива А, которые являются числами Фибоначи
  #6

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
как же леммы, теоремы, индукция?
А пусть этой ересью в разделе математики морочатся, а мы тут в песочнице програмки в три строки пишем. Но за ссылку спасибо - увлекательно... :)

0
10.08.2012, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 14:06
Привет! Вот еще темы с ответами:

Сформировать новый массив С так, чтобы в нем элементы массива А были упорядочены по возрастанию по столбцам
сформировать новый массив С так, чтобы в нем элементы массива А были упорядочены по возрастанию по...

Те элементы массива, которые являются совершенными числами, заменить количеством их делителей
3. Дан массив из 20 целых чисел диапазона . Те элементы массива, которые являются совершенными...

Сформировать новый массив В таким образом чтобы в него вошли те элементы массива А, которые являются числами Фибоначи
в массиве А(55) лежат целые числа. Сформировать новый массив В таким образом чтобы в него вошли те...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru