首页 > 解决方案 > 需要创建算法来排序和输出结果

问题描述

给你 7 个数字,形式为 A、B、C、A+B、B+C、C+A 和 A+B+C。你必须用 C++ 编写一个程序,在给定这 7 个数字的情况下,它能够计算出 A、B 和 C 的值。请速帮忙!我已经创建了一个数组来查找这七个数字的最大值和最小值,现在我被卡住了。

这是我到目前为止所拥有的:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
     int arr[10], n=7, i, max, min;
     for (i = 0; i < n; i++)
          cin >> arr[i];
     max = arr[0];
     for (i = 0; i < n; i++)
     {
          if (max < arr[i])
               max = arr[i];
     }
     min = arr[0];
     for (i = 0; i < n; i++)
     {
          if (min > arr[i])
               min = arr[i];
     }
}

样本输入: 2 2 11 4 9 7 9

该输入的输出: 2 2 7

标签: c++

解决方案


解决方案:

回答您的问题“需要创建算法来排序和输出结果”,您可以使用库中的 astd::arraystd::sort函数algorithm

但是,即使您对它们进行排序,也不能保证三个最小的数字是 A、B 和 C,因为数组可以排序为 A、B、A+B、C、A+C、B+C 和 A+B+ C。您必须检查数组中的 3 是否为 A+B。

附加信息:

  1. using namespace std;被认为是一种不好的做法(更多信息在这里)。

完整代码:

#include <iostream>
#include <array>
#include <algorithm>

int main(){
    constexpr unsigned int n = 7;
    std::array<unsigned int, n> arr;
    for (unsigned int i = 0; i < n; i++)
        std::cin >> arr[i];
    std::sort(arr.begin(),arr.end());
    if(arr[2] == arr[0] + arr[1])
        std::cout << arr[0] << " " << arr[1] << " " << arr[3] << "\n";
    else
        std::cout << arr[0] << " " << arr[1] << " " << arr[2] << "\n";
}

推荐阅读