напишите пожалуйста программу С++ (с использованием функций и циклов)
Задача : Последовательный поиск
Дано натуральное число N:
1) запишите N как сумму кубов трех различных чисел
например, N=160 ---> 2*2*2 ; 3*3*3 и т.д.
2) найдите все пифагорейские тройки, каждая из которых меньше N
например, N=10, ---> 3, 4, 5, 6, 8, 10
3) найти и вывести на экран все способы оплаты суммы N центов монетами достоинством 2, 5 и 10 центов.
например, N=15 ---> 5+10; 5+5+5; 2+2+2+2+5
4) Из проволоки длиной N нужно отрезать куски длиной 2,5 и 9. Количество кусков каждой длины может быть любым (включая ноль). Необходимо найти оптимальный отрезок с минимальным количеством отрезков.
Например,
L=21 --> 1 *2+2*5+1*9
Ответы
Ответ:
#include <iostream>
#include <vector>
#include <cmath>
// Функция для проверки, является ли число кубом целого числа
bool is_cubic(int n)
{
int root = round(pow(n, 1.0 / 3));
return root * root * root == n;
}
// Функция для поиска пифагорейских троек
void find_pythagorean_triples(int n)
{
for (int a = 1; a < n; a++)
{
for (int b = a; b < n; b++)
{
for (int c = b; c < n; c++)
{
if (a * a + b * b == c * c && c < n)
{
std::cout << a << ", " << b << ", " << c << std::endl;
}
}
}
}
}
// Функция для нахождения всех способов оплаты суммы N монетами достоинством 2, 5 и 10 центов
void find_ways_to_pay(int n, std::vector<int> &coins, std::vector<int> &counts, std::vector<int> &solution)
{
if (n == 0)
{
for (int i = 0; i < solution.size(); i++)
{
std::cout << solution[i] << " ";
}
std::cout << std::endl;
return;
}
for (int i = 0; i < coins.size(); i++)
{
if (n >= coins[i] && counts[i] > 0)
{
counts[i]--;
solution.push_back(coins[i]);
find_ways_to_pay(n - coins[i], coins, counts, solution);
counts[i]++;
solution.pop_back();
}
}
}
// Функция для нахождения минимального количества отрезков
int find_min_pieces(int n, int a, int b, int c)
{
int count_a = n / a;
int min_count = count_a;
for (int i = count_a; i >= 0; i--)
{
int remainder = n - i * a;
int count_b = remainder / b;
for (int j = count_b; j >= 0; j--)
{
remainder = n - i * a - j * b;
int count_c = remainder / c;
int total_count = i + j + count_c;
if (total_count < min_count)
{
min_count = total_count;
}
}
}
return min_count;
}
int main()
{
// Задаем значение n
int n = 160;
// 1. Находим сумму кубов трех различных чисел
for (int i = 1; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = j; k < n; k++)
{
if (i != j && i != k && j != k && i * i * i + j * j * j + k * k * k == n)
{
std::cout << i << "^3 + " << j << "^3 + " << k << "^3 = " << n