gpt4 book ai didi

C 在数组中查找第二大数

转载 作者:行者123 更新时间:2023-12-05 00:28:05 24 4
gpt4 key购买 nike

正如标题所说,我必须找到数组中的第二大数字,如果该数组中的每个数字都相等,我应该写出它是 -∞。我写了这个,谁能检查一下我是否可以优化一下?这个数组只是一个例子,它应该是 x[1...n] 但是因为我必须将它重写为伪代码,所以我以那个为例

#include <stdio.h>
int main()
{
int x[7]={90,90,78,41,21,27,35};
int i, max, secmax, y;
secmax=0;
max=x[0];
for(i=1;i<=7;i++)
{
if (x[i]>max)
{
secmax=max;
max=x[i];
}
else if (x[i]>secmax&&x[i]<max)
{
secmax=x[i];
}
}

for(i=0;i<7;i++)
if(x[i]==x[i+1])
y++;

if (y==6)
printf("sec max to minus nieskonczonosc \n");
else
printf("max to %d a secmax to %d\n",max,secmax);
return 0;
}

最佳答案

这是您可以执行的操作:

int get_second_max(int *x, size_t n)
{
int max[2] = {-MAX_INT,-MAX_INT};
int i = 0, same = 1;
if (NULL == x || 0 == n)
return -MAX_INT;

max[0] = x[0];
max[1] = x[0];
for(i = 1; i < n; i++) {
/* same is used to check
* if the array contains
* the same number all along.
*/
same &= (x[i] == x[i-1]);
/* At the i-th iteration :
* -> max[0] stores the maximum value
* -> max[1] stores the second maximum value
*/

/* We hit a new max value, we must :
* 1. Update the second max value with the current max value
* 2. Update the current max value with the new max we found
*/
if(x[i] > max[0]) {
max[1] = max[0];
max[0] = x[i];
} else if(x[i] > max[1]) {
max[1] = x[i];
}
}
if(same) {
return -MAX_INT;
} else {
return max[1];
}
}

关于C 在数组中查找第二大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com