All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!
IF语句的替代方案(找出数组中最小值)
上一篇 /
下一篇 2010-12-01 23:24:47
/ 个人分类:C/C++
看到淘宝的QA团队上次搞的一个题目,不使用IF语句,从五小强中找出战斗力最小的人, 示例:输入 70 65 20 80 50输出 20
题目详情见:http://bangpai.taobao.com/group/thread/186587-19105050.htm
他们也总结到,同学们主要给出了如下三种方法:
1.用sort、三元表达式、switch、while、treeset等手段,替代if的方法
2.不使用if来比较两个数的大小,数学方法和位运算也属于其中一种,位运算是将两数之差的符号位向右位移至最低位,从而判断两数的大小
3.数据库
sql实现。(尽管很简单的SQL,但发现这个挺有创意的哦)
先说一下,SQL实现吧(
Oracle)。将这几个数字insert到一张表temp表的num自动,然后用如下的SQL语句select出来即可。
select min(t.num) from temp t;
select b.num from (select a.id, rownum rn from (select t.id from temp t order_by t.id) a) b where b.rn=1;
晚上,对其用
C语言实现了三种不用if的方案,贴代码吧,里面也有写注释:
#include <stdio.h>
#define N 5
void printArray(int arr[], int len); void printMin(int min, char* method_name); void findMin_1(int arr[], int* pMin); void findMin_2(int arr[], int* pMin); void findMin_3(int arr[], int* pMin);
int main(int argc, char *argv[]) { int array[N]={70,65,20,80,50}; int min; printArray(array,N); findMin_1(array,&min); printMin(min,"findMin_1"); findMin_2(array,&min); printMin(min,"findMin_2"); findMin_3(array,&min); printMin(min,"findMin_3"); }
/*打印原数列*/ void printArray(int arr[], int len) { int i; printf("the array is:\n"); for( i=0 ; i<len ; i++ ) { printf("%d\t",arr[i]); } printf("\n"); }
/*打印得到的最小数字,也打印出哪种方法计算的*/ void printMin(int min, char* method_name) { printf("%s---the Minimum item is:\n%d\n",method_name,min); }
/*用三目运算符来代替if*/ void findMin_1(int arr[], int* pMin) { int i=0; *pMin=arr[0]; for( i=1 ; i<N ; i++ ) { *pMin=(*pMin-arr[i]>0)?arr[i]:*pMin; } }
/*用switch来代替if,并且用了位运算来实现比较两个的大小(对二者之差的最高位为0或1的判断)*/ void findMin_2(int arr[], int* pMin) { int i=0; *pMin=arr[0]; for( i=1 ; i<N ; i++ ) { switch ( (*pMin-arr[i])>>(8*sizeof(int)-1) ) { case 0 : *pMin=arr[i]; break; case 1 : break; default : break; } } }
/*用while+break语句来替代了if*/ void findMin_3(int arr[], int* pMin) { int i=0; *pMin=arr[0]; for( i=1 ; i<N ; i++ ) { while( *pMin - arr[i] > 0 ) { *pMin=arr[i]; break; } } }
|
输出结果为:
the array is: 70 65 20 80 50 findMin_1---the Minimum item is: 20 findMin_2---the Minimum item is: 20 findMin_3---the Minimum item is: 20
|
然后,在淘宝QA那里还有用
java的sort排序后得到最小值的。尽管比较简单,代码如下:
package com.alibaba.practice;
import java.util.Arrays;
public class FindMin { public static void main(String[] args) { int[] array = { 70, 65, 20, 80, 50 }; System.out.println("Array is :"); for (int i : array) { System.out.printf(i+"\t"); } Arrays.sort(array); // 数组排序 System.out.print("\nUsing Java sort().--The Minimum item is:" + array[array.length - 5]); } }
|
收藏
举报
TAG:
c语言
C语言
算法
if