美文网首页机器学习爱好者
鸡兔同笼,三整数排序

鸡兔同笼,三整数排序

作者: 陨星落云 | 来源:发表于2019-05-30 11:31 被阅读0次
    例题1-4:鸡兔同笼

    已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出“ No answer”(不要引号)。
    样例输入:14 32
    样例输出:12 2
    样例输入:10 16
    样例输出: No answer
    【分析】
    设鸡有a只,兔有b只,则a+b=m,2a+4b=m,联立解得a=(4n-m)/2,b=n-a。在什么情况下此解“不算数”呢?首先,a和b都是整数:其次,a和b必须是非负的。可以通过下面的程序判断:

    n = int(input('n:'))
    m = int(input('m:'))
    a = (4*n-m)/2
    b = n-a
    if (m%2 == 1 or a<0 or b<0):
        print('No answer')
    else:
        print('a:%d\nb:%d'%(a,b))
    

    换句话说,m%2=1 or a<0 or b<0是一个表达式,它的字面意思是“m是奇数,或者a小于0,或者b小于0”。这句话可能正确,也可能错误。因此这个表达式的值可能为真,也可能为假,取决于m、a和b的具体数值。
    这样的表达式称为逻辑表达式。和算术表达式类似,逻辑表达式也由运算符和值构成,例如“or”运算符称为“逻辑或”,a or b表示a为真,或者b为真。换句话说,a和b只要有一个为真,a or b就为真;如果a和b都为真,则a or b也为真。

    例题1-5:三整数排序

    输入3个整数,从小到大排序后输出。
    样例输入:20 7 33

    样例输出:7 20 33
    【分析】
    a、b、c 3个数一共只有6种可能的顺序:abc、acb、bac、bca、cab、cba,所以最简单的思路是使用6条if语句。

    三整数排序(1)

    a = int(input('a:'))
    b = int(input('b:'))
    c = int(input('c:'))
    
    if (a<=b and b<=c):
        print('%d %d %d'%(a,b,c))
    elif (a<=c and c<=b):
        print('%d %d %d'%(a,c,b))
    elif (b<=a and a<=c):
        print('%d %d %d'%(b,a,c))
    elif (b<=c and c<=a):
        print('%d %d %d'%(b,c,a))
    elif (c<=a and a<=b):
        print('%d %d %d'%(c,a,b))
    else:
        print('%d %d %d'%(c,b,a))
    

    三整数排序(2)

    另一种思路是把a、b 、c 这 3 个变量本身改成a<= b<= c的形式。首先检査a 和 b 的值, 如 果 a > b ,则交换a 和 b (利用前面讲过的三变量交换法);接下来检査a 和 c , 最后检查b 和 c , 程序如下:

    a = int(input('a:'))
    b = int(input('b:'))
    c = int(input('c:'))
    t=0
    if a>b:
        t=a
        a=b
        b=t
    if a>c:
        t=a
        a=c
        c=t
    if b>c:
        t=b
        b=c
        c=t
    print('%d %d %d'%(a,b,c))
    

    三整数排序(3)

    最后一种思路再次利用了 “问题求解”这一目标—— 它实际上并没有真的进行排序:求出了最小值和最大值,中间值是可以计算出来的。

    a = int(input('a:'))
    b = int(input('b:'))
    c = int(input('c:'))
    
    #x为当前最小值
    x = a
    if b<x:
        x = b
    if c<x:
        x = c
    #z为当前最达值
    z = a
    if b>z:
        z = b
    if c>z:
        z = c
    y = a+b+c-x-z
    print('%d %d %d'%(x,y,z))
    

    参考资料:《算法竞赛入门经典》

    相关文章

      网友评论

        本文标题:鸡兔同笼,三整数排序

        本文链接:https://www.haomeiwen.com/subject/fkumtctx.html