Пост от 20.02.2026, 20:57:00
Отредактирован 25.02.2026, 09:09:09
Время чтения: 5мин.
Была дана такая задачка:
Задание. Даны два массива C1, C2, …, Cn и P1, P2, …, Pn. Если каждый элемент первого массива меньше суммы элементов второго, найти при каких значениях i и j максимально значение выражения Ci / (Pj + Cj 2 ).
Для демонстрации нисходящей и восходящей разработки. Для того чтобы вспомнить хоть немного C++, на нём и писал, т.к. крайне долгое время не писал на нём.
В итоге получилось:
#include <cstdint>#include <print>#include <iostream>#include <vector>#include <numeric>#include <stdint.h>
int main(){ std::vector<int> array_c; std::vector<int> array_p;
signed quantity = 0; std::print("Введите количество цифр для множеств C и P: "); std::cin >> quantity;
std::print("Введите цифры C: ");
for(signed i =0;i< quantity ;i++){ int number; std::cin >> number; array_c.push_back(number); }
std::print("Введите цифры P: "); for(int i =0;i< quantity ;i++){ int number; std::cin >> number; array_p.push_back(number); }
int sum_of_array_p = std::accumulate(array_p.begin(), array_p.end(), 0); bool is_all_positive = true;
for (const int& x: array_c ){ if (x > sum_of_array_p){ std::print("Элемент первого массива больше или равен сумме элементов другого"); return 0 ; } }
float max_calculation = array_c[0] / (array_p[0] + array_c[0] * 2);
for(int i = 0; i < quantity; i++){ for(int j =0; j < quantity; j++){ float max_calculated = (float)array_c[i] / (float)(array_p[j] + array_c[j] * 2);
if(max_calculated > max_calculation){ max_calculation = max_calculated; } } }
std::print("Максимальное значение выражения Ci / (Pj + Cj * 2): {0}", max_calculation);}#include <cstdint>#include <print>#include <iostream>#include <vector>#include <numeric>#include <stdint.h>
class FormulaCalculator{private: std::vector<int> array_c; std::vector<int> array_p;
public: FormulaCalculator(std::vector<int> arr_c, std::vector<int> arr_p): array_c(arr_c), array_p(arr_p){ if (arr_c.size() != arr_p.size()){ throw "Ошибка размеров!"; } }
int get_sum_of_array(const std::vector<int> &array){ return std::accumulate(array.begin(), array.end(), 0); }
bool check_for_requirement(){ int sum_of_array_p = get_sum_of_array(array_p);
for (const int& x: array_c){ if (x > sum_of_array_p){ return false; } }
return true; }
float calculate(){ float max_calculation = array_c[0] / (array_p[0] + array_c[0] * 2);
for(int i = 0; i < array_c.size(); i++){ for(int j =0; j < array_c.size() ; j++){ float max_calculated = (float)array_c[i] / (float)(array_p[j] + array_c[j] * 2);
if(max_calculated > max_calculation){ max_calculation = max_calculated; } } }
return max_calculation; }};
void get_values_for_array(std::vector<int> &array, signed quantity){ for(signed i = 0;i< quantity ;i++){ int number; std::cin >> number; array.push_back(number); }}
int main(){ std::vector<int> array_c; std::vector<int> array_p;
signed quantity = 0; std::print("Введите количество цифр для множеств C и P: "); std::cin >> quantity;
std::print("Введите цифры C: "); get_values_for_array(array_c, quantity);
std::print("Введите цифры P: "); get_values_for_array(array_p, quantity);
FormulaCalculator calc(array_c,array_p);
if (!calc.check_for_requirement()){ std::print("Элемент первого массива больше или равен сумме элементов другого"); return 0; }
float max_calculation = calc.calculate();
std::print("Максимальное значение выражения Ci / (Pj + Cj * 2): {0}", max_calculation);}#include <cstdint>#include <print>#include <iostream>#include <vector>#include <numeric>#include <stdint.h>
int main(){ std::vector<int> array_c; std::vector<int> array_p;
signed quantity = 0; std::print("Введите количество цифр для множеств C и P: "); std::cin >> quantity;
std::print("Введите цифры C: ");
for(signed i =0;i< quantity ;i++){ int number; std::cin >> number; array_c.push_back(number); }
std::print("Введите цифры P: "); for(int i =0;i< quantity ;i++){ int number; std::cin >> number; array_p.push_back(number); }
int sum_of_array_p = std::accumulate(array_p.begin(), array_p.end(), 0); bool is_all_positive = true;
for (const int& x: array_c ){ if (x > sum_of_array_p){ std::print("Элемент первого массива больше или равен сумме элементов другого"); return 0 ; } }
float max_calculation = array_c[0] / (array_p[0] + array_c[0] * 2);
int max_i = 0; int max_j = 0;
for(int i = 0; i < quantity; i++){ for(int j = 0; j < quantity; j++){ float max_calculated = (float)array_c[i] / (float)(array_p[j] + array_c[j] * 2);
if(max_calculated > max_calculation){ max_calculation = max_calculated; max_i = i; max_j = j; } } }
std::print("Максимальное значение выражения Ci / (Pj + Cj * 2): {0}", max_calculation); std::print("При i = {}, j = {}", max_i, max_j);}#include <cstdint>#include <iostream>#include <numeric>#include <print>#include <stdint.h>#include <vector>
class FormulaCalculator {private: std::vector<int> array_c; std::vector<int> array_p;
public: FormulaCalculator(std::vector<int> arr_c, std::vector<int> arr_p) : array_c(arr_c), array_p(arr_p) { if (arr_c.size() != arr_p.size()) { throw "Ошибка размеров!"; } }
int get_sum_of_array(const std::vector<int> &array) { return std::accumulate(array.begin(), array.end(), 0); }
bool check_for_requirement() { int sum_of_array_p = get_sum_of_array(array_p);
for (const int &x : array_c) { if (x > sum_of_array_p) { return false; } }
return true; }
std::tuple<float, int, int> calculate() { float max_calculation = (float)array_c[0] / (array_p[0] + array_c[0] * 2);
int max_i = 0; int max_j = 0;
for (int i = 0; i < array_c.size(); i++) { for (int j = 0; j < array_c.size(); j++) { float max_calculated = (float)array_c[i] / (float)(array_p[j] + array_c[j] * 2);
if (max_calculated > max_calculation) { max_calculation = max_calculated; max_i = i; max_j = j; } } }
return {max_calculation, max_i, max_j}; }};
void get_values_for_array(std::vector<int> &array, signed quantity) { for (signed i = 0; i < quantity; i++) { int number; std::cin >> number; array.push_back(number); }}
int main() { std::vector<int> array_c; std::vector<int> array_p;
signed quantity = 0; std::println("Введите количество цифр для множеств C и P: "); std::cin >> quantity;
std::println("Введите цифры C: "); get_values_for_array(array_c, quantity);
std::println("Введите цифры P: "); get_values_for_array(array_p, quantity);
FormulaCalculator calc(array_c, array_p);
if (!calc.check_for_requirement()) { std::println("Элемент первого массива больше или равен сумме элементов другого"); return 0; }
auto max_calculation = calc.calculate();
std::println("Максимальное значение выражения Ci / (Pj + Cj * 2): {0}", std::get<0>(max_calculation)); std::println("При i = {}, j = {}", std::get<1>(max_calculation), std::get<2>(max_calculation));}