使用数组将最后一个最大值更改为第一个最小值

changing last maximum with first minimum using arrays

本文关键字:第一个 最小值 最大值 数组 最后一个      更新时间:2023-10-16

我正在尝试实现一个c ++程序,当给定一个序列时,它会尝试用最后一个最大值更改第一个最小值。我的代码在我大学的电子法官上进行了测试。它通过了 32 个测试用例,但卡在 32 个测试用例上。你能发现可能出了什么问题吗,关于更好的 Int,它只是为了更大的数字。程序语句是输入包含一个自然 n – 序列中的数字数量,然后是 N 个数字 – 序列的元素。 输出应该是更改的数字序列。

#include <iostream>
//#include <cmath>
#include <climits>
#define SIZE 100000
using namespace std;
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
long long int a[SIZE], min, max;
int n, min_i, max_i; min = 0x7fffffffffffffff; max = -1;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] < min) { min = a[i]; min_i = i; }
if (a[i] >= max) { max = a[i]; max_i = i; }
}
a[max_i] = min; a[min_i] = max;
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
return 0;
}

顺便说一下,对于最大的最大数量,我尝试了,int_max,uint_max,更好的 INT,在第 32 个测试用例失败时都是一样的。

  • 是否可以保证输入序列(代码中的n(不超过SIZE(代码中为 100000(元素? 是否可以改用动态内存分配?

  • 能保证n至少1吗? 如果是0min_imax_i都将具有不确定的状态,当您将它们用作索引时,可能会使您的程序崩溃:a[max_i] = min; a[min_i] = max;.

  • 如果上述两个假设是有效的,我会按照@paddy和@Frodyne已经建议的去做,并在进入主循环之前用有效数据初始化所有变量:

size_t min_i = 0;
size_t max_i = 0;
cin >> a[0];
min = a[0];
max = a[0];
for (size_t i = 1; i < n; i++) { ... }