IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 获取三个数的中间值 宏 -> 正文阅读

[C++知识库]获取三个数的中间值 宏


日常遇到较多的时间使用都是比较两个数的最大值 或者最小值,这两个处理过程很简单,都可以使用 宏MAX/MIN 来计算。

今天碰到获取三个数的中间值使用情况,花费些时间思考,将个人思考的两种方法进行总结记录。

方法

  • 方法一

    将三个数相加,然后减去三个数中的最大值和最小值,余下的就是中间值。

    /* Macros for min/max.  */
    #define MIN(a,b) (((a)<(b))?(a):(b))
    #define MAX(a,b) (((a)>(b))?(a):(b))
    ?
    /*                  sum of three number     largest         smallest */     
    #define MID_1(a,b,c) ((a) + (b) + (c) - MAX(MAX(a,b),c) - MIN(MIN(a,b),c))*

  • 方法二

    采用简单的逻辑判断,依次进行abc 三者之间的关系判断,直至获取到中间值。如下为逻辑代码:

    if a > b 
    
    ?	if a<c
    
    ?		/*  c>a>b */
    
    ?		mid = a
    
    ?	else/* a> b , a > c */ 
    
    ?		/\* *Whichever is greater between b and C is the middle value \**/
    
    ?		if b > c
    
    ?			/* a>b>c  */
    
    ?			mid = b
    
    ?		else
    
    ?			/* a>c>b  */
    
    ?			mid = c
    
    else/* a <b*/
    
    ?	if a > c
    
    ?		/*  b>a>c */
    
    ?		mid = a
    
    ?	else/*a< b , a < c*/
    
    ?		/\**Whichever is smaller between b and C is the middle value\**/
    
    ?		if b > c
    
    ?			/* a>c>b  */
    
    ?			mid = c
    
    ?		else
    
    ?			/* a>b>c  */
    
    ?			mid = b

总体测试程序

abc 三个数中,每个数与其他数的关系都是大于/等于/小于 ,因此测试用例总共有3^3 = 27 种。

#include<stdio.h>
?
/* Macros for min/max.  */
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
?
/*                  sum of three number     largest         smallest */     
#define MID_1(a,b,c) ((a) + (b) + (c) - MAX(MAX(a,b),c) - MIN(MIN(a,b),c))

#define MID_2(a,b,c) ((a)>(b)?((a)<(c)?(a):(b)>(c)?(b):(c)):((a)>(c)?(a):(b)>(c)?(c):(b)))
?
?
int main()
{
    int num[3] = {1,2,3};
    int count = 3;
    int i = 0, j = 0, k = 0;
    int mid1 = -1,mid2 = -1;
?
    for(i = 0;i <count; i ++)
        for(j = 0; j < count; j++)
            for (k = 0; k < count; k++)
            {
                mid1 = MID_1(num[i], num[j], num[k]);
                mid2 = MID_2(num[i], num[j], num[k]);
                printf("MID(%d,%d,%d) => MID_1 = %d, MID_2 = %d, MID_1 %s MID_2\n",num[i],num[j],num[k],mid1,mid2,mid1==mid2?"==":"!=");
            }
?
    return 0;
}
结果如下:

MID(1,1,3) => MID_1 = 1, MID_2 = 1, MID_1 == MID_2
MID(1,2,1) => MID_1 = 1, MID_2 = 1, MID_1 == MID_2
MID(1,2,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(1,2,3) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(1,3,1) => MID_1 = 1, MID_2 = 1, MID_1 == MID_2
MID(1,3,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(1,3,3) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(2,1,1) => MID_1 = 1, MID_2 = 1, MID_1 == MID_2
MID(2,1,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,1,3) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,2,1) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,2,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,2,3) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,3,1) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,3,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(2,3,3) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(3,1,1) => MID_1 = 1, MID_2 = 1, MID_1 == MID_2
MID(3,1,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(3,1,3) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(3,2,1) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(3,2,2) => MID_1 = 2, MID_2 = 2, MID_1 == MID_2
MID(3,2,3) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(3,3,1) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(3,3,2) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2
MID(3,3,3) => MID_1 = 3, MID_2 = 3, MID_1 == MID_2

?可以看到两种结果计算的中间值是一样,结果均正确。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 15:53:52  更:2022-01-03 15:54:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:08:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码