开发者社区> 问答> 正文

今天有点无聊,上来求一算法!!

听说阿里云社区里有很多牛人,今天有点无聊,上来求一算法,各位大虾看题

现有一区间:$start--$end  (例:5--10)。
给一变量$param:
如果$param<$start  则$param=$start
如果$param>$end  则$param=$end
不用if else,三元 等逻辑算法(虽然简单并且效率也高)
求实现此要求的数学算法

展开
收起
冷过心死 2014-07-15 11:46:16 8738 0
19 条回答
写回答
取消 提交回答
  • Re今天有点无聊,上来求一算法!!
    <?php

    function demo($param, $start , $end) {
        $param < $start && $param = $start ;
        $param > $end && $param = $end;
        return $param;
    }

    echo demo(3, 5, 10);  // 5
    echo demo(15, 5, 10); // 10
    echo demo(5, 11, 4); // 4,这就是不足之处!
    小弟不才,忘记什么叫逻辑算法了,不知道这个算不算!

    2014-07-17 23:45:24
    赞同 展开评论 打赏
  • 一个程序员,欢迎骚扰!!!
    一眼 不就看出来了 还用算

    -------------------------

    人工智能

    2014-07-15 21:17:34
    赞同 展开评论 打赏
  • LT是个伪程序员
    黑猫白猫,抓到老鼠就是好猫。
    2014-07-15 17:33:41
    赞同 展开评论 打赏
  • 可能在这个过程中产生有用的思想和方法,也可能没有;可能会使参与者的能力在这个过程中得到训练和提高,也可能没有。
    2014-07-15 17:16:23
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    .................好高深
    2014-07-15 16:31:20
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    这道题的意义在哪里?你们简直太闲了,哈哈
    不过看高手过招,挺有意思
    2014-07-15 15:01:38
    赞同 展开评论 打赏
  • 回20楼zhedianshi的帖子
    跟max,min是一个故事哈.....不过能想到这个很不错.我也想到这个了.
    2014-07-15 14:31:24
    赞同 展开评论 打赏
  • 这么多for怎没人用switch?
    function sss($start,$end,$param){
        switch($param){
            case $param < $start:
                $param = $start;
                break;
            case $param > $end:
                $param = $end;
                break;
            default:
                return $param;
        }
        return $param;
    }



    2014-07-15 14:28:02
    赞同 展开评论 打赏
  • 回8楼码农007的帖子
    论坛难得这么热闹,忍不住手痒,版主写了php版本,于是写个C版本int的.. #include<stdio.h>
    int middle(int a,int b,int c)
    {
        long long la=a;
        long long lb=b;
        long long lc=c;
        long long f1=(lc-la)>>63&0x1;
        long long f2=(lb-lc)>>63&0x1;
        long long f3=1^(f1+f2);
        return f1*a+f2*b+f3*c;
    }
    int main()
    {
        int a,b,c;
        while(~scanf("%d%d%d",&a,&b,&c))
        {
            printf("%d\n",middle(a,b,c));
        }
    }
    转为longlong 是为了防止溢出测试如下:5 10 355 10 885 10 1310-2000000000 2000000000 -1000000000-1000000000-2000000000 2000000000 10000000001000000000-2000000000 2000000000 -2000000001-2000000000-2000000000 2000000000 20000000012000000000只是感觉这样效率很低...



    2014-07-15 13:55:10
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    分别将 所求数 转化为  下界 进制数 和 上界 进制数,
    所求结果 为

    example :   (5,10,x) x=8
    x1 = 13(mod5)
    x2 = 08(mod10)
    answer = (x1msb ⊙ x2msb)*(x1msb*5+x2msb*10)+(x1msb xor x2msb)*x

    这里的x1msb x2msb需要进行 高位整数除法处理后的结果 才能得到二进制的 0,1
    2014-07-15 13:14:57
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    看了半天没想出来
    看来我的算法水平差的没脸出来混了

    以后还要跟各位大虾学习学习
    2014-07-15 12:35:43
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    可以用min,max不是很简单?
    $param = 4;
    echo min(max($param,5),10);
    就行了吧


    2014-07-15 12:24:53
    赞同 展开评论 打赏
  • 真的可以做到吗?答案是肯定的。我先来个抛砖引玉
    function foo($a, $b, $c) {
      $f1 = -(($c - $a) >> 31);
      $f2 = -(($b - $c) >> 31);
      $f3 = 1 ^ ($f1 + $f2);
      return $f1 * max($a, $c) + $f2 * min($b, $c) + $f3 * $c;
    }

    echo foo(5, 10, 3); //5
    echo foo(5, 10, 8); //8
    echo foo(5, 10, 13); //10




    -------------------------

    回 10楼(驻足云端) 的帖子
    不错,如果不可以用min,max呢?
    2014-07-15 12:21:22
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    数学不好,暂时想不到,在不分区间(即不用if)的条件下,此f(x)的解法...坐等数学帝...
    2014-07-15 12:18:33
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    路过!~~
    貌似php应该可以做到
    2014-07-15 12:16:26
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    尝试了 或 与 异 模 舍入...各种组合,实在得不到答案
    大家继续探讨下实现此算法的可能性

    -------------------------

    回8楼码农007的帖子
    把版主都吸引来了,哈哈
    大神们估计会陆续登场了吧

    -------------------------

    Re今天有点无聊,上来求一算法!!
    确实!~~  有min 有 max...

    -------------------------

    Re今天有点无聊,上来求一算法!!
    又学到了

    不过想想 max min的机制  应该是在内部用逻辑运算来实现的吧

    感觉越来越有希望了
    大虾们继续啊

    -------------------------

    Re今天有点无聊,上来求一算法!!
    我觉得,这题的意义跟“探索宇宙的边界”是一样的,都具有以下特点:

    动机:兴趣
    目的:无
    价值:体现在过程中
    结果:可能在这个过程中产生有用的思想和方法,也可能没有;可能会使参与者的能力在这个过程中得到训练和提高,也可能没有。
    2014-07-15 12:12:23
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    例:5--10 (x-y)
    a=x-z
    b=y-z

    假设判断数为1(z)
    因为a大于0,b大于0。所以z=x=5。

    假设判断数为11(z)
    因为a小于0,b小于0。所以z=y=10。

    假设判断数为6(z)
    因为a小于0,b大于0。所以不成立。

    -------------------------

    回3楼旅人说的帖子
    蛋疼了,发完突然才发现楼主求算法啊,这个没有

    -------------------------

    Re今天有点无聊,上来求一算法!!
    午饭期间花了一顿饭钱找高手求来的方法 function foo($a, $b, $c) {
        Return (((($c-$a) + (($c-$a)  >> 31)) ^ (($c-$a) >> 31)) - ((($c-$b) + (($c-$b)  >> 31)) ^ (($c-$b) >> 31)) + $a + $b) / 2;
    }

    echo foo(20, 30, 50);  // 30

    这没用任何函数 算法有待研究
    2014-07-15 12:08:28
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    不存在这个算法(不使用比较),而且对于解释性的语言来说,也别想着位运算会提高速度了。

    即使存在,里面必然包含 2个乘法和一次除法,这个时间可比if - else费时。

    所以,不存在。
    2014-07-15 12:02:42
    赞同 展开评论 打赏
  • Re今天有点无聊,上来求一算法!!
    不使用比较真的可以实现??我很怀疑
    2014-07-15 11:56:21
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧 立即下载
分身大师那些事 立即下载
分身大师那些事儿 立即下载