免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HappyWin
打印 上一主题 下一主题

不用判断语句,求两个数的最大值  关闭 [复制链接]

论坛徽章:
0
141 [报告]
发表于 2005-06-07 15:08 |只看该作者

不用判断语句,求两个数的最大值

我也写一个新的:

  1. #define MASK 0x7fffffff
  2. int max (int x, int y)
  3. {
  4.         int z;

  5.         z =  (x>;>;31) - (y>;>;31) + (((x&MASK) - (y&MASK))>;>;31);
  6.         z= (z+1)*(z+2)*(3-2*z)/6;
  7.         return z*x + (1-z)*y;
  8.        
  9. }
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
142 [报告]
发表于 2005-06-07 15:31 |只看该作者

不用判断语句,求两个数的最大值

这样子不行吧?
x >; 0, y >; 0的时候z == 0???

论坛徽章:
29
戌狗
日期:2013-11-14 09:53:052016科比退役纪念章
日期:2016-07-12 18:29:4415-16赛季CBA联赛之新疆
日期:2016-11-07 13:15:0015-16赛季CBA联赛之辽宁
日期:2017-01-18 10:23:5115-16赛季CBA联赛之吉林
日期:2017-05-02 14:02:2319周年集字徽章-年
日期:2020-01-15 13:50:582016科比退役纪念章
日期:2021-06-03 14:15:3115-16赛季CBA联赛之山东
日期:2021-06-21 17:30:5615-16赛季CBA联赛之江苏
日期:2021-06-22 16:42:2015-16赛季CBA联赛之深圳
日期:2021-12-21 15:54:0215-16赛季CBA联赛之佛山
日期:2022-04-08 09:43:5715-16赛季CBA联赛之广东
日期:2022-06-29 19:59:19
143 [报告]
发表于 2005-06-07 15:44 |只看该作者

不用判断语句,求两个数的最大值

int  max(int  x,int y)
{
    int arr[2];
    arr[0]=x;
    arr[1]=y;
    return arr[!(x/y)];
}

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
144 [报告]
发表于 2005-06-07 15:53 |只看该作者

不用判断语句,求两个数的最大值

原帖由 "wxycyel" 发表:

}

请大家有点耐心把前面的帖子看完再发言,也来得及
这之所以是个精彩帖子,是因为前面有好多高人发表了精彩的看法,看一看,对自己是有好处的,同时也不要犯前面n多人犯过的错误

论坛徽章:
29
戌狗
日期:2013-11-14 09:53:052016科比退役纪念章
日期:2016-07-12 18:29:4415-16赛季CBA联赛之新疆
日期:2016-11-07 13:15:0015-16赛季CBA联赛之辽宁
日期:2017-01-18 10:23:5115-16赛季CBA联赛之吉林
日期:2017-05-02 14:02:2319周年集字徽章-年
日期:2020-01-15 13:50:582016科比退役纪念章
日期:2021-06-03 14:15:3115-16赛季CBA联赛之山东
日期:2021-06-21 17:30:5615-16赛季CBA联赛之江苏
日期:2021-06-22 16:42:2015-16赛季CBA联赛之深圳
日期:2021-12-21 15:54:0215-16赛季CBA联赛之佛山
日期:2022-04-08 09:43:5715-16赛季CBA联赛之广东
日期:2022-06-29 19:59:19
145 [报告]
发表于 2005-06-07 16:37 |只看该作者

不用判断语句,求两个数的最大值

yuxh  说得对。我没看清内容,也没想清楚。

论坛徽章:
0
146 [报告]
发表于 2005-06-07 18:14 |只看该作者

不用判断语句,求两个数的最大值

原帖由 "yuxh" 发表:
这样子不行吧?
x >; 0, y >; 0的时候z == 0???


不会啊。

论坛徽章:
29
戌狗
日期:2013-11-14 09:53:052016科比退役纪念章
日期:2016-07-12 18:29:4415-16赛季CBA联赛之新疆
日期:2016-11-07 13:15:0015-16赛季CBA联赛之辽宁
日期:2017-01-18 10:23:5115-16赛季CBA联赛之吉林
日期:2017-05-02 14:02:2319周年集字徽章-年
日期:2020-01-15 13:50:582016科比退役纪念章
日期:2021-06-03 14:15:3115-16赛季CBA联赛之山东
日期:2021-06-21 17:30:5615-16赛季CBA联赛之江苏
日期:2021-06-22 16:42:2015-16赛季CBA联赛之深圳
日期:2021-12-21 15:54:0215-16赛季CBA联赛之佛山
日期:2022-04-08 09:43:5715-16赛季CBA联赛之广东
日期:2022-06-29 19:59:19
147 [报告]
发表于 2005-06-07 19:04 |只看该作者

不用判断语句,求两个数的最大值

新的算法。

#include <stdio.h>;

#define INT_SIZE  sizeof(int)*8

int max(int x,int y)
{
        int arr[8]={x,y,x,x,y,y,x,y};
        int z=x-y;
        int site=0;
        int bitx=!!(x&(1<<(INT_SIZE-1)));
        int bity=!!(y&(1<<(INT_SIZE-1)));
        int bitz=!!(z&(1<<(INT_SIZE-1)));

        site^=bitz;
        site^=bity<<1;
        site^=bitx<<2;

        return arr[site];
}

int main(int argc,char * argv[])
{
        int x,y;
        if (argc<3) {
                printf ("pleas input two integer!\n";
                return -1;
        }
        x=atoi(argv[1]);
        y=atoi(argv[2]);
        printf("the max is %d\n",max(x,y));

        return 0;
}

论坛徽章:
29
戌狗
日期:2013-11-14 09:53:052016科比退役纪念章
日期:2016-07-12 18:29:4415-16赛季CBA联赛之新疆
日期:2016-11-07 13:15:0015-16赛季CBA联赛之辽宁
日期:2017-01-18 10:23:5115-16赛季CBA联赛之吉林
日期:2017-05-02 14:02:2319周年集字徽章-年
日期:2020-01-15 13:50:582016科比退役纪念章
日期:2021-06-03 14:15:3115-16赛季CBA联赛之山东
日期:2021-06-21 17:30:5615-16赛季CBA联赛之江苏
日期:2021-06-22 16:42:2015-16赛季CBA联赛之深圳
日期:2021-12-21 15:54:0215-16赛季CBA联赛之佛山
日期:2022-04-08 09:43:5715-16赛季CBA联赛之广东
日期:2022-06-29 19:59:19
148 [报告]
发表于 2005-06-07 19:13 |只看该作者

不用判断语句,求两个数的最大值

用了需要比较的两个数的和它们差值的最高位。做了一个表。

论坛徽章:
29
戌狗
日期:2013-11-14 09:53:052016科比退役纪念章
日期:2016-07-12 18:29:4415-16赛季CBA联赛之新疆
日期:2016-11-07 13:15:0015-16赛季CBA联赛之辽宁
日期:2017-01-18 10:23:5115-16赛季CBA联赛之吉林
日期:2017-05-02 14:02:2319周年集字徽章-年
日期:2020-01-15 13:50:582016科比退役纪念章
日期:2021-06-03 14:15:3115-16赛季CBA联赛之山东
日期:2021-06-21 17:30:5615-16赛季CBA联赛之江苏
日期:2021-06-22 16:42:2015-16赛季CBA联赛之深圳
日期:2021-12-21 15:54:0215-16赛季CBA联赛之佛山
日期:2022-04-08 09:43:5715-16赛季CBA联赛之广东
日期:2022-06-29 19:59:19
149 [报告]
发表于 2005-06-07 19:17 |只看该作者

不用判断语句,求两个数的最大值

用了普通数据和能产生溢出的数据做了测试,在大概有十几组数据。如
-2000000000   2000000000
200000000     -2000000000
这样了数据。都通过了。

论坛徽章:
0
150 [报告]
发表于 2005-06-07 19:38 |只看该作者

不用判断语句,求两个数的最大值

原帖由 "wxycyel" 发表:
int max(int x,int y)
{
       int arr[8]={x,y,x,x,y,y,x,y};
       int z=x-y;
       int site=0;
       int bitx=!!(x&(1<<(INT_SIZE-1)));
       int bity=!!(y&(1<<(INT_SIZE-1)));
       int bitz=!!(z&(1<<(INT_SIZE-1)));

       site^=bitz;
       site^=bity<<1;
       site^=bitx<<2;

       return arr[site];
}

具体没看完,
问一下:int z=x-y;语句,你考虑溢出了吗?



还有,建议大家贴出程序之前,把自己的思路做一个简要的描述!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP