• Предмет: Информатика
  • Автор: dlqvis
  • Вопрос задан 5 месяцев назад

напишите пожалуйста программу С++ (с использованием функций и циклов)
Задача : Последовательный поиск
Дано натуральное число 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

Ответы

Ответ дал: bubnowden
1

Ответ:

#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

Вас заинтересует
7 лет назад