假设我们有一堆收音机,每个收音机都一遍又一遍地循环播放同一首歌。
是否可以同步所有收音机中的所有歌曲?我们能找到一个时间从头听到所有歌曲吗?
为了简单起见,我们会说我们只有两个收音机。
我有以下公式:
c 和 z 代表歌曲的长度(以秒为单位)。
a 和 x 代表歌曲中的当前位置(以秒为单位)
S表示C和Z同步的时间。 (两首歌同时开始时)
例如 :
Song 1
a = 17 : the time before the song ends.
b = 8 : the rest of the song.
c = a + b which is the full song in seconds.
And
Song 2
x = 8 : the time before the song ends.
y = 9 : the rest of the song.
z = 8 + 9 which is the full song in seconds.
Song 1 : a + ( a + b) => S
Song 2 : x +(( x + y ) × n) => S
Song 1 : 17 + ( 17 + 8) => 42
Song 2 : 8 + ((8 + 9)) = 25
So in order to synchronize song 2 with song 1 we have to multiply (x + y)
by two and add x to it.
Song 2 : 8 + ((8 + 9) x 2) => 42
So S = 42 and so the two songs will synchronize after 42 seconds.
现在第一个例子是最简单的。对于其他情况,我必须将 z 和 c 乘以二以上才能获得适合它们的 S。
我还有一些其他输入,并且我尝试想出一种为我返回 S 的算法,但我没有运气。
这是我到目前为止想到的:
c = a + b
a = 16
b = 4
c = 20
s = 216
And
z = x + y
x = 12
y = 5
z = 17
s = 216
S is the LCM of c and z
在第一个示例中,S 是这样找到的:
s = x +(z × n)
n = ( s − x ) ÷ b
12 + ( 17 × 12) = 216
and
s = a + (c × n)
n = ( s − a ) ÷ b
16 + ( 20 × 10 ) = 216
我根据 S 的值想出了下面两个公式。但是我需要找到一种方法来找到 n 而无需实际使用 S。
或者换句话说,我需要找到一种方法来找到我应该将(a + b)乘以n和(x + y)乘以n多少次才能得到S。
n = ( s − a ) ÷ b
S = x + ( y × n)
但这些公式显然不起作用,因为它们需要 S。我们不能使用它,因为这应该是我试图提出的公式的结果。
以下是一些计算的其他示例:
a2 = 52
b2 = 4
c2 = 56
s2 = 276
x2 = 60
y2 = 12
z2 = 72
s2 = 276
这是永远不会同步的情况:
A1 = 14
B1 = 4
C1 = 18
S1 = Never synchronizes
A2 = 19
B2 = 5
C2 = 24
S2 = Never synchronizes
以下是歌曲已经同步的一些情况:
Case 1
A2 = 17
B2 = 0
C2 = 17
S4 = 0
A3 = 25
B3 = 0
C4 = 25
S4 = 0
Case 2
A4 = 0
B4 = 13
C4 = 13
S4 = 0
A5 = 0
B5 = 21
C5 = 21
S5 = 0
我正在考虑使用最小公倍数,但我不确定如何在这种情况下实现它,或者它是否是这个问题的正确解决方案。
如果歌曲超过 2 首,我想要提出的算法也应该有效。
例如,为 3 或 4 首歌曲找到 S。
这个算法的主要问题是判断两首歌是否同步,计算本身并不难。
你能帮我吗 ?提前致谢