cpp题目描述小秦同学有四个整数 ����ABCD。和一个等式□-□□+□。他想将 ����ABCD 填入□ 中使等式最大每个数用且只用一次。求出合法等式的最大值是多少?输入格式一行四个整数 ����ABCD。输出格式表示最大的答案。输入输出样例样例 1输入样例 复制2 2 2 2输出样例 复制0样例 2输入样例 复制2 3 -5 -2输出样例 复制15数据范围与提示对于 100100 的数据−1
题目要求找出四个整数A、B、C、D的组合,使得等式(□-□)*(□+□)的结果最大。我们可以通过穷举法来解决这个问题。
首先,我们可以将等式(□-□)*(□+□)进行展开,得到(□^2-□^2)。由于我们要求最大值,那么最大值只可能出现在两种情况下:
- A和B都是正数,C和D都是负数。此时,(□-□)的结果最大,(□+□)的结果最小,所以结果最大。
- A和B都是负数,C和D都是正数。此时,(□-□)的结果最小,(□+□)的结果最大,所以结果最大。
因此,我们可以将问题转化为找出A、B、C、D中最大的两个数和最小的两个数。
具体算法如下:
- 读入A、B、C、D四个整数。
- 将A、B、C、D排序,得到有序数组arr。
- 计算arr[2] - arr[1]并将结果赋给diff1。
- 计算arr[3] - arr[0]并将结果赋给diff2。
- 比较diff1和diff2的大小,较大的值即为最大结果。
代码实现如下:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int A, B, C, D;
cin >> A >> B >> C >> D;
int arr[4] = {A, B, C, D};
sort(arr, arr + 4);
int diff1 = arr[2] - arr[1];
int diff2 = arr[3] - arr[0];
int result = max(diff1, diff2);
cout << result << endl;
return 0;
}
时间复杂度分析:排序的时间复杂度为O(nlogn),其中n为数组的长度,其他操作的时间复杂度都为O(1)。所以总的时间复杂度为O(nlogn)
原文地址: http://www.cveoy.top/t/topic/ixIi 著作权归作者所有。请勿转载和采集!