1. sayfa
|
Biraz zorlasan elle bile çözülebilecek gibi duruyor. Bilgisayarda, en sağ basamağa koyabileceklerinle başla. Örneğin 0 dan 9 a kadar tüm rakamlar. 0 için 0 ın soluna 0 dan 9 a rakamlar gelebilir. 1 in soluna 1 den 9 a , 2 nin soluna 2 den 9 a rakamlar gelebilir. bu şekilde ekleyerek yeterli gördüğün bir basamağa kadar (9 olabilir mesela) hepsini hesaplayıp bir array e ekle. Sonra hepsinin toplamını bul, alt tarafa da en büyük sayıya kadar olan tüm sayıların toplamını yaz ( N*(N+1)/2 ) . Sonra oranı kontrol et, 0.001 den büyük gelirse basamak sayısının artması gerekir, küçük gelirse en büyük sayıdan başlayarak array den birer birer çıkartıp hesaplamayı yapabilirsin. 0.001 den küçük geldiği yerde elindeki en büyük sayıya 1er ekleyerek(N i arttırarak) paydayı arttırıp oranın 0.01 e eşitlendiği yeri bulursun. 32 bit integer toplama için yetersiz olabilir ona dikkat et. Bu bilgisayar için ne kadar sürer emin değilim, 2-3 basamaklı sayıları yazarsan başka bir çözüm görünebilir gibi duruyor ama çıkartamadım. |
|
19448003 Buldum. 0.01 için 302501 buluyor. Düzenleme: Gelen uyarılar doğrultusunda, 19448001 bulunuyor artık. C# kodu
|
1-9 arası sayılar nonInc oluyor soruda verilen örneğe göre, yoksa 10'dan başlarsanız 0.01 için 301601 bulunuyor. Zaten en performanslı çözüm değil, sadece soruyu merak ettim ve fikir vermesi açısından paylaştım. |
| soruyu Türkçe'ye çevirebilrmisin ?? :s |
| uğraşıyoruz arkadaşlar yarin gece 23.59 son teşekkürler cevaplar için |
Ben de 0.01 için 302501 buldum ama 0.001 için 19448001 buldum. Muhtemelen dillerin farklı floating point implementasyonlarından kaynaklanıyordur. def isNonIncreasing(a): |
java'da 19448001 buldum.
|
|
counter değişkeni double iken 19448001 çıkıyor c#'ta da. Float kullanınca hassasiyet düşmüş. Zaten azaltma işlemini postfix yapmışım ilk kodda, etkisi olmamış. :) Teşekkürler yorumlar için ben de hatalarımı görmüş oldum. :) |
cevabi aldim, behlul kacar kafasi bu. |
1. sayfa
< Bu mesaj bu kişi tarafından değiştirildi xDAGx -- 23 Kasım 2014; 12:46:05 >