আমাদের একটি সংখ্যা n আছে, আমাদের এটিকে ০-এ রূপান্তর করতে হবে নিচের অপারেশনগুলো যেকোনো সংখ্যক বার ব্যবহার করে:
n-এর বাইনারি রিপ্রেজেন্টেশনে ডানপাশের বিটটি সিলেক্ট করুন।n-এর বাইনারি রিপ্রেজেন্টেশনেi-তম বিট পরিবর্তন করুন যখন(i-1)-তম বিট ১ সেট করা থাকে এবং(i-2)থেকে ০তম বিটগুলো ০ সেট করা থাকে।
শেষে আমাদের n-কে ০-এ রূপান্তর করার ন্যূনতম অপারেশন সংখ্যা বের করতে হবে।
উদাহরণস্বরূপ, ইনপুট n = 6 হলে আউটপুট হবে 4 কারণ প্রাথমিক 6 = "110", তারপর দ্বিতীয় অপারেশন দিয়ে "010", তারপর প্রথম অপারেশন দিয়ে "011", তারপর দ্বিতীয় অপারেশন দিয়ে "001" এবং শেষে প্রথম অপারেশন দিয়ে "000"।
সমাধানের ধাপসমূহ (গ্রে কোড / বাইনারি রিফ্লেকশন)
n := n-এর বাইনারি বিটের লিস্টm := একটি নতুন লিস্টlast := 0n-এর প্রতিটিdএর জন্য:যদি
last == 1হয়, তবেd := 1 - dlast := dd-কেm-এর শেষে যোগ করুন
m-এর এলিমেন্টগুলো যোগ করে বাইনারি সংখ্যা বানানডেসিমাল ফরমে রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
def solve(n):
n = list(map(int, bin(n)[2:]))
m = []
last = 0
for d in n:
if last == 1:
d = 1 - d
last = d
m.append(d)
m = ''.join(map(str, m))
return int(m, 2)
n = 6
print(solve(n)) ইনপুট
6
আউটপুট
4