博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客21天刷题_day#3
阅读量:5898 次
发布时间:2019-06-19

本文共 2410 字,大约阅读时间需要 8 分钟。

牛客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))
2range
test=input('请输入')
请输入dsfas
test
'dsfas'
#我考虑的太简单,不能只考虑最大和最小,要考虑中间的一些值,例如这里的64new_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 2500

看了一下解答,还是要一个一个数字去遍历,满足一个结果加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=0for 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+=1print (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))

转载于:https://www.cnblogs.com/Howfars/p/9812760.html

你可能感兴趣的文章
objective c:import和include的区别, ""和<>区别
查看>>
CentOS 6.5上部署drbd
查看>>
spring SchedulerFactoryBean 没有创建 Scheduler的实现类bea
查看>>
基于cobbler实现自动化安装系统
查看>>
java基础专栏—IOUtils(4)
查看>>
TimeUnit使用
查看>>
进程管理
查看>>
我的VIM配置(ubuntu)
查看>>
linux 常用配置文件
查看>>
cisco交换机配置练习疑难
查看>>
我的友情链接
查看>>
16、MariaDB工作中遇到的一部分报错的解决方法
查看>>
jdk的fastdebug版本是什么
查看>>
ConcurrentLinkedQueue cas实现分析
查看>>
在论坛中出现的比较难的sql问题:13(循环替换问题)
查看>>
简单的Samba服务器安装
查看>>
blog addr
查看>>
如何选择 Web 前端模板引擎?
查看>>
VMware 上Clone Ubuntu虚拟机后找不到eth0
查看>>
由毫秒(ms)转换为日期和时间的格式(简单易用)
查看>>