在新年时,邻居m和n点外卖。在此之后,他们按一定的间隔点餐。编写一个python程序,找出两者在一月份同一天订购的天数。
例如:如果m在1月1日后每2天订购一次,在1月1日后每3天订购n次,则它们在同一天订购的次数为6次(包括1月1日)。
我试过这个。
时间循环中的c1和c2会给出他们点外卖的日子。我计划将c1和c2的所有值添加到两个单独的列表中,并将它们进行比较??我不确定这是否可能,如果是,这是错误的代码。我不知道该怎么做。有人帮忙吗?
m=int(input())
n=int(input())
c1=1
c2=1
count=0
while c1 in range(1,31):
c1=c1+m
l1=[1,c1]
while c2 in range(1,31):
c2=c2+n
l2=[1,c2]
for x in l1:
for y in l2:
if x==y:
count=count+1
print(count)发布于 2021-10-19 11:42:26
m=int(input())
n=int(input())
c1=1
c2=1
l1=[]
l2=[]
count=1
while c1< 32:
c1=c1+m
l1.append(c1)
while c2< 32:
c2=c2+n
if c2 in l1:
l2.append(c2)
count+=len(l2)
print(count)由于1月1日在任何时候都很常见,所以我从1开始计数。
发布于 2021-10-19 11:25:36
注意:下面的解决方案是高效的__,您的代码中不需要超过31次迭代(实际上不超过31/3)。测试所有的日子组合是无用的,并将导致您的代码是不可伸缩的。
使用理解/生成器很容易解决这一问题。
它们在一起订购的天数都是步骤的倍数(从0开始计算)。
你可以用:
[day+1 for day in range(31+1) if not (day%2 or day%6)]
# output: [1, 7, 13, 19, 25, 31]注意:day%x返回0如果day是x__的倍数,那么当day同时是2和6__的倍数时,not (day%2 or day%6)是True。
然而,你很快意识到,你不需要测试所有的日子,只有那些最大的乘数:
[day+1 for day in range(0, 31+1, 6) if not (day%2 or day%6)]
# output: [1, 7, 13, 19, 25, 31]如果你只想数数天数:
sum(1 for day in range(0, 31+1, 6) if not (day%2 or day%6))
# output: 6发布于 2021-10-19 11:47:35
首先,要更正代码,您应该知道=没有向list添加项。它只是重写了它。因此,这是正确的代码方式:
m=int(input())
n=int(input())
c1=1
c2=1
count=0
l1 = []
l2 = []
while c1 in range(1,32):
c1=c1+m
l1.append(c1)
while c2 in range(1,32):
c2=c2+n
l2.append(c2)
for x in l1:
if x in l2:
count=count+1
print(count)但是我认为有一个更好的方法来解决这个问题。正如你所看到的,他们所订购的日子都是LCM of m和n,以及它的multiples小于31。所以代码应该是这样的:
import math
count = 0
i = 2
lcm = math.lcm(m, n)
while lcm <= 31:
counter = counter + 1
lcm = lcm * i
i = i + 1
print(counter)https://stackoverflow.com/questions/69629730
复制相似问题