Interviewstreet, Ocak ayında aşağıdaki soruyu içeren ikinci CodeSprint'lerini yaptı. Programlı cevap yayınlanır ancak istatistiksel bir açıklama içermez.
(Orijinal sorunu ve yayınlanan çözümü Google kredileriyle Interviewstreet web sitesinde oturum açıp bu sayfadan Coin Tosses sorununa giderek görebilirsiniz .)
Bozuk Para Atışları
N ardışık kafa elde edene kadar savurmaya devam etmek istediğiniz tarafsız bir paranız var. Madeni parayı M kez fırlattınız ve şaşırtıcı bir şekilde, tüm fırlatmalar kafalarla sonuçlandı.
N ardışık kafa elde edene kadar beklenen ek fırlatma sayısı nedir?
Giriş:
İlk satır T sayısını içerir. Sonraki T satırlarının her biri iki N ve M numarası içerir.
Çıktı: İlgili
test durumu için cevabı içeren çıktı T çizgileri. Yanıtı tam olarak 2 ondalık basamağa yuvarlayın.
Örnek Giriş:
4
2 0
2 1
3 3
3 2
Örnek Çıktı:
6.00
4.00
0.00
8.00
Örnek Açıklamalar:
N = 2 ve M = 0 ise, art arda 2 kafa alana kadar jetonu atmaya devam etmeniz gerekir. Ortalama 6 madeni paraya ihtiyaç duyulduğunu göstermek zor değil.
N = 2 ve M = 1 ise, arka arkaya 2 kafaya ihtiyacınız vardır ve zaten 1'e sahipsiniz. Ne olursa olsun, bir kez daha atmanız gerekir. Bu ilk atışta, kafa alırsan, bitirdin. Aksi takdirde, ardışık sayaç sıfırlandıkça baştan başlamanız ve N = 2 ardışık kafa elde edene kadar jetonu atmaya devam etmeniz gerekir. Beklenen jeton fırlatma sayısı 1 + (0,5 * 0 + 0,5 * 6) = 4,0 N = 3 ve M = 3 ise, zaten 3 başınız var, bu yüzden daha fazla fırlatmaya ihtiyacınız yok.
Ortaya koyduğum tüm matematiksel denklemler, yukarıda listelenen örnek girdi verileri için doğru cevaplara sahipti, ancak diğer tüm girdi kümeleri (yanlış bilinen) için yanlıştı. Programatik çözümleri sorunu denklemle gelmeye çalış yöntemimden çok farklı çözüyor gibi görünüyor. Birisi bunu çözecek bir denklemin nasıl bulunacağını açıklayabilir mi?