我对C编程很陌生,最近我遇到了一个从3个数字中找到第2大数字的问题.我尝试使用if ... else,但总是给出最小的数字作为输出.我在这段代码中犯的逻辑错误是什么?
#include<stdio.h>
int main() {
int a;
int b;
int c;
a=10;
b=30;
c=7;
if(a>b) {
if(a>c) {
if(b>c)
printf("2nd largest is %d",c);
else
printf("2nd largest is %d",b);
}
} else
{
if(b>c) {
if(c>a)
printf("2nd largest is %d",a);
else
printf("2nd largest is %d",c);
} else
printf("2nd largest is %d",b);
}
}
Run Code Online (Sandbox Code Playgroud)
有很多方法可以执行这些操作,但如果您只有二进制 min 和 max 函数可供使用:
printf("2nd largest is %d", min(min(max(a,b),max(b,c)),max(a,c)));
Run Code Online (Sandbox Code Playgroud)
如果您需要更通用的选择(不仅仅是第二大元素,而是第 k 大元素),请使用像快速选择这样的选择算法:http://en.wikipedia.org/wiki/Quickselect#Algorithm