ধরুন আমাদের একটি সংখ্যা n আছে, আমাদেরকে যে কোনো সংখ্যক বার নিম্নলিখিত ক্রিয়াকলাপগুলি ব্যবহার করে এটিকে 0 তে রূপান্তর করতে হবে -
-
n এর বাইনারি উপস্থাপনায় ডানদিকের বিটটি নির্বাচন করুন।
-
n এর বাইনারি উপস্থাপনায় ith বিট পরিবর্তন করুন যখন (i-1) তম বিট 1 এ সেট করা হয় এবং (i-2) থ থেকে 0 তম বিট 0 এ সেট করা হয়।
সুতরাং অবশেষে আমাদের n কে 0-এ রূপান্তরিত করার জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি n =6 এর মত হয়, তাহলে আউটপুট হবে 4 কারণ প্রাথমিকভাবে 6 ="110", তারপরে দ্বিতীয় অপারেশন দ্বারা "010" তে রূপান্তর করুন, তারপর প্রথম অপারেশন ব্যবহার করে "011" তে রূপান্তর করুন, তারপরে রূপান্তর করুন " 001" দ্বিতীয় অপারেশন ব্যবহার করে এবং অবশেষে প্রথম অপারেশন ব্যবহার করে "000" এ রূপান্তর করুন৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=সংখ্যার বাইনারি বিটের তালিকা n
-
m:=একটি নতুন তালিকা
-
শেষ:=0
-
প্রতিটি d-এর জন্য n, করুন
-
যদি শেষটি 1 এর মত হয়, তাহলে
-
d:=1-d
-
-
শেষ:=d
-
m
এর শেষে d ঢোকান
-
-
m:=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))
ইনপুট
"95643", "45963"
আউটপুট
4