मान लीजिए हमें एक विशाल संख्या दी गई है और हमें यह पता लगाना है कि क्या संख्या के अंकों का कोई क्रमपरिवर्तन 8 से विभाज्य है। संख्या हमें स्ट्रिंग प्रारूप में प्रदान की जाती है।
उदाहरण के लिए, यदि input_num = "4696984" है, तो आउटपुट "Divisible by eight" होगा।
हल करने का तरीका
इस समस्या को हल करने के लिए, हम संख्या के अंकों के साथ संभव सभी तीन-अंकों के क्रमपरिवर्तनों की जांच करेंगे और देखेंगे कि क्या वे संख्या के किसी सर्व-अंक क्रमपरिवर्तन में हो सकते हैं। यदि आठ से विभाज्य एक तीन-अंकीय क्रमपरिवर्तन संख्या के किसी सर्व-अंक क्रमपरिवर्तन के अंत में होता है, तो हम कहेंगे कि वह क्रमपरिवर्तन 8 से विभाज्य है।
- यदि input_num की लंबाई < 3:
- यदि input_num % 8 == 0, तो True लौटाएं
- उल्टी स्ट्रिंग भी जांचें
- False लौटाएं
- temp_arr := आकार 10 की सूची 0 से प्रारंभ (अंकों की आवृत्ति)
- input_num के प्रत्येक अंक की आवृत्ति गिनें
- 104 से 999 तक 8 की छलांग में लूप (सभी 3-अंकीय 8 के गुणक):
- उस गुणक के अंकों की आवृत्ति occurrences में गिनें
- यदि occurrences के सभी मान temp_arr में संबंधित मानों ≤ हैं, तो True लौटाएं
- False लौटाएं
उदाहरण
def solve(input_num):
if len(input_num) < 3:
if int(input_num) % 8 == 0:
return True
input_num = input_num[::-1]
if int(input_num) % 8 == 0:
return True
return False
temp_arr = [0] * 10
for count in range(len(input_num)):
temp_arr[int(input_num[count])] += 1
for count in range(104, 1000, 8):
temp = count
occurrences = [0] * 10
occurrences[temp % 10] += 1
temp //= 10
occurrences[temp % 10] += 1
temp //= 10
occurrences[temp % 10] += 1
temp = count
if occurrences[temp % 10] > temp_arr[temp % 10]:
continue
temp //= 10
if occurrences[temp % 10] > temp_arr[temp % 10]:
continue
temp //= 10
if occurrences[temp % 10] > temp_arr[temp % 10]:
continue
return True
return False
if solve("4696984"):
print("Divisible by eight")
else:
print("Not divisible by eight")
इनपुट
4696984
आउटपुट
Divisible by eight