Göreviniz verilen x
çıktıdır 2*x
. Kolay değil mi!? Ancak bir mandal var: x
(muhtemelen sonsuz) sürekli bir kesir olarak verilecek ve çıktı sürekli bir kesir olmalıdır. Giriş, derecesi en fazla 2 olan gerçek bir cebirsel sayı olarak garanti edilir.
Giriş : devam eden kesri x
. Bu 3 bölüme ayrılmıştır: tamsayı, önek ve yinelenen bölüm. Tamsayı kısmı tek bir tamsayıdan oluşur. Ön ek ve yinelenen kısım, ön eki açıklayan ve sürekli kesimin bir kısmını tekrar eden pozitif tam sayı dizileridir (muhtemelen boş). Örneğin, girdi (3, [1], [2, 4])
sürekli kesri temsil eder [3; 1, 2, 4, 2, 4, ...]
.
Tekrarlanan kısım boşsa, bu rasyonel bir sayıya işaret eder. Örneğin, (3, [1, 2], [])
temsil eder [3; 1, 2] = 11/3
. Sen (yani rasyonel sayının iki formu kabul etmelidir (3, [1, 1, 1], [])
olup, [3; 1, 1, 1] = 11/3
ayrıca geçerli giriş olmalıdır).
Çıktı : Girdi ile aynı formatta, girişin iki katı devam eden kısmını yazdırın. Çıktı rasyonel ise, devam eden kesirden herhangi birini ya da çıktısını alabilirsiniz. Cevap doğru cevaba eşdeğer olduğu sürece, sorun yoktur; “sıkıştırma” gerekli değildir, bu yüzden sonsuz kısım biraz “kontrolsüz” [1; 4, 2, 3, 2, 3...]
olabilir (örneğin yazılabilir (1, [4], [2, 3])
veya yazılabilir (1, [4, 2, 3], [2, 3])
). Tüm cevaplar kesin olmalı.
Test durumları : Form sütununa kolaylık sağlamak için verilmiştir.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
Ve son olarak biraz daha büyük bir test durumu hassas sağlamak için: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
En kısa kod kazanır!
İpucu : Burada açıklandığı gibi sürekli kesirler üzerinde aritmetik işlemi oldukça basit bir şekilde gerçekleştirebilirsiniz . Devam eden bir kesriyi iki katına çıkarmak, bu algoritmanın sadece özel bir durumudur (zor kısım, devam eden kesimin tekrar ettiği zamanları bulmak olabilir).
Sqrt[2]
.
[3; 1, 1, 1]
Kullanacağımız (3, [1, 1, 1], [])
giriş biçiminde olacaktır - bu yüzden sadece netliği sağlamak için soru muhtemelen bu biçimde (üçüncü paragrafta) belirtmelidir.
(-2, [1, 5, 2], [6, 2])
girdi için kabul edilebilir çıktı olabilir (-1, [2], [2, 1])
mi? Ne dersiniz (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?