用c语言写对于给定的含有n元素的无序序列,求这个序列中最大和次大的两个不同的元素,输入有两行,第一行为一个正整数n(2<=n<=10000),第二行为n个整数,空格隔开。输出序列中最大值和次大值,空格隔开。
时间: 2024-05-09 10:15:37 浏览: 126
c语言+从键盘输入10个无序的整数,存放在数组中,找出数组中最大值与最小值的所在的位置,并输出数组元素所在的位置与数组元素的值
5星 · 资源好评率100%
以下是用C语言的代码实现:
```c
#include <stdio.h>
#include <limits.h>
int main() {
int n, max1 = INT_MIN, max2 = INT_MIN;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
if (num > max1) {
max2 = max1;
max1 = num;
} else if (num > max2 && num != max1) {
max2 = num;
}
}
printf("%d %d", max1, max2);
return 0;
}
```
首先我们定义了两个变量`max1`和`max2`来存储最大值和次大值,初始值都为`INT_MIN`,这是为了确保序列中的任意一个整数都比`max1`和`max2`的初始值要大。
接着,我们输入序列的长度`n`,并用一个循环遍历序列中的每一个元素。在循环中,我们输入当前元素的值`num`,然后根据`num`和`max1`、`max2`的比较关系更新`max1`和`max2`的值。如果`num`比`max1`大,那么我们把当前的`max1`赋值给`max2`,然后把`num`赋值给`max1`;否则,如果`num`比`max2`大且不等于`max1`,那么我们把`num`赋值给`max2`。
最后,我们输出`max1`和`max2`的值,它们就是序列中的最大值和次大值。
阅读全文