المشكلة تقول كالتالي:
سأعطيك رقمين n , m يمكن من 1 الى 10 قوة 18 .. اريد عدد الارقام التي بينهما (معهما) التي تحوي في تمثيلها الثنائي (الباينري) صفراً واحداً
مثال على الدخل :
n = 5
m = 10
الخرج : 2
لان 5 = 101
و 6 = 110
وباقي الارقام الى عشرة تحوي اكثر من صفر او لا تحوي اصفاراً ابداً
مثال ثاني:
2015 2015
الخرج : 1
مثال اخير :
72057594000000000 72057595000000000
الخرج : 26
لغة روبي , xmax المدخل الاكبر , xmin المدخل الاصغر
سرعة .. O(log2(m)) بحيث m المدخل الاكبر
اداء الذاكرة O(1)
إن شاء الله يكون الحل صحيح
xmax = 6
xmin = 5
startRange = Math.log2(xmin).ceil
endRange = Math.log2(xmax).ceil
biggestNumber = (2**endRange)-1
smallestNumber = (2**startRange)-1
count = 0
powerNumber = 1
for i in 0...(endRange-1)
bnumber = biggestNumber-powerNumber
snumber = smallestNumber-powerNumber
if ((bnumber <= xmax and bnumber >= xmin) or
(snumber <= xmax and snumber >= xmin))
count += 1
end
powerNumber = powerNumber * 2
end
puts "Result: #{count}"
التعليقات