Заполнить массив случайными числами и отобрать в другой массив все числа Фибоначчи. Используйте логическую функцию, которая определяет, является ли переданное ей число числом Фибоначчи. Пример: Массив А: 12 13 85 34 47 Массив B: 13 34
Ответ нейросети
10 марта 2026 12:53
Ниже детальное решение задачи "заполнить массив случайными числами и отобрать в другой массив все числа Фибоначчи" с пояснениями и примерами. Учитываю цель ученика — понять материал, стиль и сложность под класс 10 информатики.
Задача внутри задачи
- Проверить, является ли данное число числом Фибоначчи.
- Заполнить массив A случайными числами.
- В массив B собрать только те элементы A, которые являются числами Фибоначчи.
- Пример: A = [12, 13, 85, 34, 47] → B = [13, 34] (13 и 34 — числа Фибоначчи; 85 и 12,47 — нет).
- Как понять, является ли число Фибоначчи
- Простое свойство: n – число Фибоначчи тогда и только тогда, когда одно из чисел 5n^2 + 4 или 5n^2 - 4 является полным квадратом.
- Это работает для неотрицательных целых чисел. Для отрицательных чисел считаем их не Фибоначчи.
- Важно помнить, что 0 тоже является числом Фибоначчи: последовательность начинается как 0, 1, 1, 2, 3, 5, 8, ...
- Пошаговый план решения
- Шаг 1. Реализовать функцию is_fibonacci(x), которая возвращает True, если x — Фибоначчи, иначе False.
- Шаг 2. Сгенерировать массив A из n случайных целых чисел в заданном диапазоне.
- Шаг 3. Пройтись по A и собрать в массив B только те элементы, для которых is_fibonacci возвращает True.
- Шаг 4. Вывести A и B.
- Временная сложность: O(n) для проверки каждого элемента и фильтрации, доп. место: O(n) для хранения массивов A и B.
- Реализация на Python (почему именно Python — часто встречается на занятиях по информатике в школе, легко читается)
Код Python (с подробными комментариями)
import random import math
Проверка, является ли число вершиной Фибоначчи (неотрицательное число)
def is_perfect_square(x): if x < 0: return False s = int(math.sqrt(x)) return s * s == x
def is_fibonacci(n): if n < 0: return False # число Фибоначчи, если 5*n^2 ± 4 — квадрат return is_perfect_square(5 * n * n + 4) or is_perfect_square(5 * n * n - 4)
Генерация массива A случайными числами и отбор Фибоначчи в B
def fill_and_select(n, lo=0, hi=99): A = [random.randint(lo, hi) for _ in range(n)] B = [x for x in A if is_fibonacci(x)] return A, B
Пример использования
n = 5 # можно изменить количество элементов A, B = fill_and_select(n, 0, 99) print("A:", A) print("B:", B)
Объяснение кода
- is_fibonacci(n) реализует проверку по формуле 5n^2 ± 4. Для неотрицательных n она корректно возвращает True, если n — Фибоначчи.
- is_perfect_square(x) проверяет, является ли x квадратом целого числа.
- fill_and_select генерирует массив A случайными числами в диапазоне [lo, hi] и формирует B как подмножество A, где элементы удовлетворяют is_fibonacci.
Пример работы
- Пусть A = [12, 13, 85, 34, 47]. is_fibonacci возвращает True для 13 и 34, и False для остальных, поэтому B = [13, 34].
- Реализация на C++
Код C++, близкий к стилю школьной информатики (с использованием генератора случайных чисел)
#include <bits/stdc++.h> using namespace std;
bool isPerfectSquare(long long x) { if (x < 0) return false; long long r = sqrt((long double)x); // корректируем возможные погрешности округления while (r * r < x) ++r; while (r * r > x) --r; return r * r == x; }
bool isFibonacci(long long n) { if (n < 0) return false; long long a = 5 * n * n + 4; long long b = 5 * n * n - 4; return isPerfectSquare(a) || isPerfectSquare(b); }
int main() { ios::sync_with_stdio(false); cin.tie(nullptr);
int n = 5; // можно изменить размер массива A
vector<int> A(n);
// генератор случайных чисел
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 99);
for (int i = 0; i < n; ++i) A[i] = dis(gen);
vector<int> B;
for (int x : A) {
if (isFibonacci(x)) B.push_back(x);
}
// Вывод
cout << "A: ";
for (int i = 0; i < n; ++i) {
if (i) cout << ' ';
cout << A[i];
}
cout << "\nB: ";
for (size_t i = 0; i < B.size(); ++i) {
if (i) cout << ' ';
cout << B[i];
}
cout << "\n";
return 0;
}
Объяснение кода
- isFibonacci(n) работает так же, как и в Python: n считается Фибоначчи, если 5n^2+4 или 5n^2-4 — квадрат.
- isPerfectSquare(x) аккуратно проверяет квадратность числа, учитывая возможные дробные округления при работе с sqrt.
- Генератор случайных чисел создаёт массив A, а B собирается из элементов A, которые удовлетворяют isFibonacci.
- Временная сложность: O(n). Память: O(n) для хранения A и B.
- Дополнительные заметки
- Можно дополнительно оптимизировать: сначала найти максимум maxA в A и построить множество чисел Фибоначчи до maxA, затем проверить принадлежность каждого элемента A этому множеству. Это может быть полезно, если диапазон значений большой и нужно проверить много элементов.
- Обработка отрицательных чисел: для них функция is_fibonacci вернет False (они не Фибоначчи по определению в большинстве задач).
Если хотите, могу привести конкретный пример с вашим набором A и показать точный результат B или запустить небольшой тест с вашим диапазоном значений.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



