#include<stdio.h>
main()
{
int a,b,c
printf("输入三个数:")
scanf("%d%d%d",&a,&b,&c)
if(a>b&&a<c||a<b&&a>c)
printf("中间数是%d\n",a)
else if(b>a&&b<c||b<a&&b>c)
printf("中间数是%d\n",b)
else if(c>a&&c<b||c<a&&c>b)
printf("中间数是%d\n",c)
}
1.可以先排序后抽出中间那个2.if
if(a>=b&&a<=c||a<=b&&a>=c)则a
if(b>=a&&b<=c||b<=a&&b>=c)则c
if(c>=a&&c<=b||c<=a&&c>=b)则b
只输入三个数的话很简单,只需要对三个数排序一下,起泡就可以。
如果输入的数很多的话,比如求100W个数据第1W大的是哪个
可以用二叉堆,取100W中的物理位置前1W的数建立二叉堆,以后的99W数据都和堆中第1W个比较,如果大,就做一次替换(这个时候要注意保持堆的特性)。最后堆中最后一个数字就是结果。
#include<stdio.h>#define N 1001
void bubblesort(int *list,int len) //冒泡排序
{
int i,j
int temp
for(i=0i<len - 1i++)
for(j=0j<len-i - 1j++)
{
if(list[j+1]<list[j])
{
temp=list[j+1]
list[j+1]=list[j]
list[j]=temp
}
}
}
int main(){
int num
int tar[N]
scanf("%d", &num)
while(num != 0){
for(int i = 0 i< num i++){
scanf("%d", &tar[i])
}
bubblesort(tar, num)
if(num % 2 == 0){
printf("%lg\n",(tar[num/2] + tar[num/2 - 1]) / 2.0)
}else{
printf("%lg\n", tar[num/2]*1.0)
}
scanf("%d",&num)
}
return 0
}