我们经常会碰到求最大值,下面看看求第二大值的两种方法:
(1)
#include<stdlib.h> //导入随机数的头文件
int main ()
{
int n = 0;
scanf("%d", &n); //输入一个整形n
int max1 = 0, max2 = 0; //定义两个整形变量(max1 为最大值, max2为第二大值)
for(int i = 0; i < n; i++){ //产生n个随机数
unsigned int random = arc4random() % (100 - 10 + 1) + 10; //产生10到100之间的随机数
if(max1 < random){ //判断随机数是否大于最大值max1
max2 = max1; //如果随机数大于最大值,把最大值赋给第二大值,把随机数赋给最大值
max1 = random;
} else if(max2 < random){ //如果随机数小于最大值且大于第二大值,把随机数赋给第二大值
max2 = random;
}
}
return 0;
}
(2)
#include<stdlib.h> //导入随机数的头文件
int main ()
{
int n = 0;
scanf("%d", &n);
int max1 = 0, max2 = 0;
for(int i = 0; i < n; i++){
unsigned int random = arc4random() % (100 - 10 + 1) + 10;
if(max2 < random){ //判断随机数是否大于第二大值,如果大于第二大值,将随机数赋给第二大值
max2 = random;
if (max1 < max2){ //比较第二大值和最大值的大小,如果第二大值大于最大值,将它们进行交换
int temp = max2;
max2 = max1;
max1 = temp;
}
}
}
return 0;
}
第一种的算法核心就是拿随机数和最大值作比较,如果大于最大值,那么把最大值赋给第二大值,把随机数赋给最大值,如果小于最大值大于第二大值,那么随机数赋给第二大值。
第二种算法的核心是拿随机数和第二大值作比较,如果大于第二大值那么将随机数赋给第二大值,再用第二大值与最大值比较,如果第二大值大于最大值,将它们对换。