用c语言编写程序,从一个降序的整数序列中找出第二大的数(第一大的数可以有多个)。 输入格式: 第一行输入数据个数n,1<=n<=20。 第二行输入n个整数。 输出格式: 输出序列的第二大的数,如果没有,则输出no。 输入样例1: 10 10 10 10 8 6 4 3 1 1 1 输出样例1: 8 输入样例2: 3 2 2 2 输出样例2: no
时间: 2024-02-17 07:03:32 浏览: 80
以下是用C语言编写的程序,可以实现从一个降序的整数序列中找出第二大的数:
```c
#include <stdio.h>
int main() {
int n, max, sec_max, i;
scanf("%d", &n);
scanf("%d", &max);
sec_max = max;
for (i = 1; i < n; i++) {
int num;
scanf("%d", &num);
if (num < max) {
sec_max = num;
break;
} else if (num > max) {
sec_max = max;
max = num;
}
}
if (sec_max == max) {
printf("no");
} else {
printf("%d", sec_max);
}
return 0;
}
```
程序中首先输入数字个数n,然后输入n个数字,用变量max和sec_max分别存储第一大和第二大的数字。通过循环比较每个输入的数字,更新max和sec_max的值。最后根据sec_max的值输出结果。如果sec_max等于max,则说明没有第二大的数字,输出"no"。否则输出sec_max的值。
相关问题
用C语言编写程序,从一个降序的整数序列中找出第二大的数(第一大的数可以有多个)。
```c
#include <stdio.h>
int main()
{
int n; // 序列长度
printf("请输入序列长度:");
scanf("%d", &n);
int max1 = -1, max2 = -1; // 最大数和次大数
int num; // 当前输入的数
printf("请输入降序序列:");
for (int i = 0; i < n; i++)
{
scanf("%d", &num);
if (num > max1)
{
max2 = max1;
max1 = num;
}
else if (num > max2 && num != max1)
{
max2 = num;
}
}
if (max2 == -1)
{
printf("无次大值。\n");
}
else
{
printf("第二大的值为:%d\n", max2);
}
return 0;
}
```
说明:本程序中,首先初始化 `max1` 和 `max2` 为 -1(不可能存在的数),然后依次输入序列中的数。对于每个输入的数,如果它比当前的最大数 `max1` 大,则将 `max1` 更新为它,同时将原来的 `max1` 更新为 `max2`;如果它比 `max2` 大但不比 `max1` 大,则将 `max2` 更新为它。这样,最终得到的 `max2` 就是次大的数。若不存在次大数,则输出提示信息。
用c语言编程:c语言:编写程序,从一个降序的整数序列中找出第二大的数(第一大的数可以有多个)。 输入格式: 第一行输入数据个数n,1<=n<=20。 第二行输入n个整数。 输出格式: 输出序列的第二大的数,如果没有,则输出no。 输入样例1: 10 10 10 10 8 6 4 3 1 1 1 输出样例1: 8 输入样例2: 3 2 2 2 输出样例2: no
这是一个算法题,以下是C语言实现的代码:
```c
#include <stdio.h>
int main() {
int n, max, sec_max, num;
scanf("%d", &n);
scanf("%d", &max);
sec_max = max;
for (int i = 1; i < n; i++) {
scanf("%d", &num);
if (num > max) {
sec_max = max;
max = num;
} else if (num < max && num > sec_max) {
sec_max = num;
}
}
if (max == sec_max) {
printf("no");
} else {
printf("%d", sec_max);
}
return 0;
}
```
算法思路:
由于输入的是降序的整数序列,我们只需要遍历一遍这个序列,找到第一个不等于最大数的数,就是第二大的数。如果最大数出现了多次,则第二大的数不存在,输出no。
我们用两个变量 `max` 和 `sec_max` 分别记录最大数和第二大的数。遍历序列时,如果当前数比最大数大,则更新最大数 `max` 和第二大的数 `sec_max`;如果当前数在最大数和第二大的数之间,则更新第二大的数 `sec_max`。最后判断是否存在第二大的数即可。
阅读全文