c++ - 黑客等级 C++ 上的 Mini-Max Sum
问题描述
给定五个正整数,找出可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为单行的两个空格分隔的长整数。
void min_max(unsigned long int arr[]){
unsigned long int max = arr[0];
unsigned long int min = arr[0];
for(int i=1; i<5; i++){
if(arr[0] > arr[i]) min = arr[i];
if(arr[0] < arr[i]) max = arr[i];
}
cout << min << " " << max;
}
unsigned long int Sum(unsigned long int arr[], int n){
unsigned long int sum = 0;
for(int i = 0; i<5; i++){
sum += arr[i];
}
sum = sum - arr[n];
return sum;
}
int main(){
unsigned long int arr[5];
for(int i=0; i<5; i++){
cin >> arr[i];
}
unsigned long int SUM[5];
for(int j=0; j<5; j++){
SUM[j] = Sum(arr, j);
}
min_max(SUM);
}
如果输入的数字很小,那么我的代码没有问题,但是当,比如说,一些非常大的数字,比如 293247447,那么它说测试用例失败了。我不知道为什么,有人可以帮我吗?
解决方案
您将看到的简单解决方案,只有两个循环,但可能非常复杂O(N*N)
void miniMaxSum(vector<int> arr)
{
// LLONG_MAX --> set min to the highest value in long long
// LLONG_MIN --> set max to the lowest value in long long but why lowest value ? because you want highest value
long long min = LLONG_MAX , max = LLONG_MIN , sum ;
for(int i = 0 ;i < arr.size() ; ++i)
{
sum = 0;
for(int j = 0; j < arr.size() ; ++j)
{
if(i != j)
sum += arr[j];
}
if(sum > max)
max = sum;
if (sum < min)
min = sum;
}
cout << min << " " << max << endl;
}
推荐阅读
- sql - 列已添加到表中但未显示
- excel - 从第 15 行开始复制列并粘贴到不同的工作表中,然后每隔 87 行粘贴一次
- bash - 为什么“.myscript”仅在一个 Git for Windows sh.exe 中返回文件未找到?
- php - 如何修复 SOAP-ERROR:编码:对象没有属性?
- python - 在数据块图中设置轴范围
- python - 我安装了 Tornado,但我无法运行我的脚本。我不断收到“ImportError:没有名为龙卷风的模块”
- javascript - 如何裁剪 selenium 屏幕截图以使图像与给定 DOM 元素的尺寸相同
- sql-server - 有没有办法在 SQL 中包含一个超链接以跳转到某个代码段?
- c++ - 在 C++ 中的线程之间共享列表
- applescript - 返回到对话框列表树中的上一个对话框