输入一串数字,寻找其中第三大的数字,如果没有第三大的数,就输出最大的数字
我把排序封装成一个函数给你,如下
#include<stdio.h>
//冒泡排序
void sort(int arr[], int size)
{
int j,i,temp;
for (i = 0; i < size-1;i ++)
{
int count = 0;
for (j = 0; j < size-1 - i; j++)//size-1-i是因为每一趟就会少一个数比较
{
if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
count = 1;
}
}
if (count == 0) //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
break;
}
}
int main(){
int N,i;
printf("请输入一串数字的个数:\n");
scanf("%d",&N);
int a[N];
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
//调用sort函数
sort(a,N);
if(N<3){printf("没有第三大的值,最大值为:%d",a[N-1]);}
else{printf("第三大的数为:%d",a[N-3]);}
return 0;
}
①没有第三大值的情况:
定义三个变量,分别记录最大,次大和第三大数。输入的数分别与各个数比较大小
#include <stdio.h>
int main()
{
int m1=0,m2=0,m3=0;
int s1=0,s2=0,s3=0;
int n;
while(scanf("%d",&n) != EOF)
{
if(s1==0 || n>m1)
{
if(s2 != 0)
s3 = 1;
if(s1 != 0)
s2 = 1;
s1 = 1;
m3 = m2;
m2 = m1;
m1 = n;
}
else if(s2==0 || n>m2)
{
if(s2 != 0)
s3 = 1;
s2 = 1;
m3 = m2;
m2 = n;
}
else if(s3==0 || n>m3)
{
s3 = 1;
m3 = n;
}
}
if(s3 != 0)
printf("%d",m3);
else
printf("%d",m1);
return 0;
}
我简单写了一个实现供你参考。如果对你有帮助请采纳。
#include <stdio.h>
int main() {
int n;//表示要输入几个数字
printf("请输入数字个数:");
scanf("%d", &n);
int a = 0, b = 0, c = 0; // a是最大的,b是第二大的,c是第三大的
for (int i = 0; i < n; i++) {
int tmp;
scanf("%d", &tmp);
if (tmp > a) {
c = b;
b = a;
a = tmp;
} else if (tmp > b) {
c = b;
b = tmp;
} else if (tmp > c) {
c = tmp;
}
}
printf("第三大数字为:%d\n", c);
return 0;
}