मान लीजिए हमारे पास एक नंबर n है, हमें इसे निम्नलिखित ऑपरेशन्स का उपयोग करके किसी भी संख्या में 0 में बदलना है:
nके बाइनरी प्रतिनिधित्व में सबसे दाएं बिट का चयन करें।nके बाइनरी प्रतिनिधित्व में i-वें बिट को बदलें जब(i-1)-वां बिट 1 पर सेट हो और(i-2)-वें से 0-वें बिट 0 पर सेट हों।
तो अंत में हमें n को 0 में बदलने के लिए आवश्यक न्यूनतम ऑपरेशन्स की संख्या ढूंढनी है।
उदाहरण के लिए, यदि इनपुट n = 6 है, तो आउटपुट 4 होगा क्योंकि प्रारंभ में 6 = "110", फिर दूसरी ऑपरेशन का उपयोग करके इसे "010" में बदलें, फिर पहली ऑपरेशन का उपयोग करके "011" में बदलें, फिर दूसरी ऑपरेशन का उपयोग करके "001" में बदलें और अंत में पहली ऑपरेशन का उपयोग करके "000" में बदलें।
हल करने के चरण
n :=नंबरnके बाइनरी बिट्स की सूचीm :=एक नई सूचीlast := 0nमें प्रत्येकdके लिए:- यदि
last == 1, तोd := 1 - d last := ddकोmके अंत में जोड़ें
- यदि
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))
इनपुट
6
आउटपुट
4