• 牛客21天刷题_day#3


    牛客21天刷题_day#3

    Contents

    1.好多鱼

    题目

    牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:

    1. 放进去的鱼是安全的,不会被其他鱼吃掉
    2. 这条鱼放进去也不能吃掉其他鱼
      鱼缸里面已经存在的鱼已经相处了很久,不考虑他们互相捕食。放入的新鱼之间也不会相互捕食。现在知道新放入鱼的大小范围[minSize,maxSize](考虑鱼的大小都是整数表示),牛牛想知道有多少种大小的鱼可以放入这个鱼缸。
    • 输入描述:

      • 输入数据包括3行. 第一行为新放入鱼的尺寸范围minSize,maxSize(1 ≤ minSize,maxSize ≤ 1000),以空格分隔。
      • 第二行为鱼缸里面已经有鱼的数量n(1 ≤ n ≤ 50)
      • 第三行为已经有的鱼的大小fishSize[i](1 ≤ fishSize[i] ≤ 1000),以空格分隔。
    • 输出描述:

      • 输出有多少种大小的鱼可以放入这个鱼缸。考虑鱼的大小都是整数表示
    • 示例

    输入
    1 12
    1
    1

    输出
    3

    解释
    可以放入大小为1,11,12的鱼,一共3种

    思路和解答

    • 思路

    题目有点啰嗦...简化一下:

    • 已知
      新的鱼的大小范围;旧的鱼的数目(这个好像没用);旧的每一个鱼的大小


    • 使得新鱼和旧鱼不会互相吃的新鱼种类数。这个条件是:新鱼和旧鱼的大小差别不在[2,10]倍范围

    for i in range(2,1):#如果下限大于上限,那么直接得到空list
        print (i)#没有任何输出
    
    for i in range(2,1,-1):#如果指定步长是-1,那么就可以倒序遍历
        print (i)
    type(range(2,1,-1))
    
    2
    
    
    
    
    
    range
    
    test=input('请输入')
    
    请输入dsfas
    
    test
    
    'dsfas'
    
    #我考虑的太简单,不能只考虑最大和最小,要考虑中间的一些值,例如这里的64
    new_range,old_num,old_list='1 1000','13','2 2 2 2 8 8 8 8 64 64 64 64 1000'#多个变量赋值只可以这样写
    
    new_min=int(new_range.split(' ')[0])
    new_max=int(new_range.split(' ')[1])
    
    old_list=old_list.split(' ')
    for i in range(len(old_list)):
        old_list[i]=int(old_list[i])
    print (old_list)
    old_max=max(old_list)
    old_min=min(old_list)
    print (old_max,old_min)
    a=set(range(new_min,int(old_min/10)+1))
    b=set(range(10*old_max+1,new_max+1))
    c=set(range(int(old_max/2)+1,2*old_max))
    d=set(range(new_min,new_max+1))
    #print(a,b,c,d)
    len(a.union(b).union(c).intersection(d))
    
    [2, 2, 2, 2, 8, 8, 8, 8, 64, 64, 64, 64, 1000]
    1000 2
    
    
    
    
    
    500
    

    看了一下解答,还是要一个一个数字去遍历,满足一个结果加1一次,简单的采用不等式的方法,无法覆盖所有case;所以我这样做算是有点走偏了...

    • 解答
    new_range=input()
    old_num=int(input())
    old_list=input().split(' ')
    
    new_min=int(new_range.split(' ')[0])
    new_max=int(new_range.split(' ')[1])
    count=0
    for k in range(len(old_list)):
        old_list[k]=int(old_list[k])
    #print (new_min,new_max)
    for i in range(new_min,new_max+1):
        flag=1
        for j in range(len(old_list)):
            if ((i>=old_list[j]*2 and i<=old_list[j]*10) or (i*2<=old_list[j] and 10*i>=old_list[j])):
                flag=0#只要一次置为0,那么之后即使不满足if,还是0
        if flag:
            count+=1
    print (count)
    

    2.表达式求值

    题目

    今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
    1
    2
    3
    4

    1+23=7
    1
    (2+3)=5
    123=6
    (1+2)3=9
    现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", "
    ", "(", ")"符号,能够获得的最大值。

    解答

    abc=input().split(' ')
    a=int(abc[0])
    b=int(abc[1])
    c=int(abc[2])
    print (max(a+b*c,a*(b+c),a*b*c,a*b+c,(a+b)*c,a+b+c))
    
  • 相关阅读:
    MySQL通过RPM安装
    HDU4279(2012年天津网络赛---数论分析题)
    Redis实战
    顺序环形队列的各种基本运算
    cocos2d_随手篇1_关于ccTouchBegan的调用
    URAL 1019
    Redis实战之Redis + Jedis
    dataGridView控件--未将对象引用设置添加到对象的实例
    创建 router 连通 subnet- 每天5分钟玩转 OpenStack(100)
    配置 L3 agent
  • 原文地址:https://www.cnblogs.com/Howfars/p/9812760.html
Copyright © 2020-2023  润新知