给定 nn 个正整数,输出它们中的第二大的数和第二小的数。c++
时间: 2023-09-05 19:04:35 浏览: 551
### 回答1:
这是一个简单的问题。下面是一种使用 C 语言解决此问题的方法:
```
#include <stdio.h>
void second_min_max(int *arr, int n, int *second_max, int *second_min) {
if (n < 2) {
*second_max = *second_min = 0;
return;
}
int max = arr[0], min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
*second_max = max;
max = arr[i];
} else if (arr[i] > *second_max) {
*second_max = arr[i];
}
if (arr[i] < min) {
*second_min = min;
min = arr[i];
} else if (arr[i] < *second_min) {
*second_min = arr[i];
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int second_max, second_min;
second_min_max(arr, n, &second_max, &second_min);
printf("Second largest number is %d\n", second_max);
printf("Second smallest number is %d\n", second_min);
return 0;
}
```
该算法的时间复杂度为 O(n),其中 n 是数组中的元素数量。
### 回答2:
假设给定的 nn 个正整数存储在一个列表 nums 中。
要找到第二大的数和第二小的数,可以使用两个变量 second_max 和 second_min 来记录第二大和第二小的数。
首先将 second_max 和 second_min 初始化为负无穷大,表示还没有找到第二大和第二小的数。
然后遍历列表 nums,对于每个数 num,分别判断是否大于 second_max 或小于 second_min。
若 num 大于 second_max,则将 second_max 更新为 num,同时将原先的 second_max 更新为最大的数。
若 num 小于 second_min,则将 second_min 更新为 num,同时将原先的 second_min 更新为最小的数。
遍历完列表后,second_max 和 second_min 分别记录了第二大和第二小的数。
最后输出 second_max 和 second_min。
以下是具体的代码实现:
```python
def find_second_max_and_min(nums):
second_max = float('-inf')
max_num = float('-inf')
second_min = float('inf')
min_num = float('inf')
for num in nums:
if num > max_num:
second_max = max_num
max_num = num
elif num < min_num:
second_min = min_num
min_num = num
return second_max, second_min
nums = [2, 4, 6, 8, 10]
second_max, second_min = find_second_max_and_min(nums)
print("第二大的数是:", second_max)
print("第二小的数是:", second_min)
```
对于给定的数 [2, 4, 6, 8, 10],输出结果为:
第二大的数是: 8
第二小的数是: 4
### 回答3:
假设给定的 nn 个正整数的数组为arr。
要找到第二大的数,我们可以先对数组进行降序排序,然后返回排序后的第二个元素即可。代码如下:
```python
arr.sort(reverse=True)
second_largest = arr[1]
```
同样地,要找到第二小的数,我们可以对数组进行升序排序,然后返回排序后的第二个元素。
```python
arr.sort()
second_smallest = arr[1]
```
这样,我们就可以得到给定 nn 个正整数中的第二大的数和第二小的数。
需要注意的是,以上方法只适用于 nn 大于等于2的情况。如果 nn 只有一个元素,则无法找到第二大或第二小的数。
阅读全文