हमें एक JavaScript फ़ंक्शन लिखना है जो पहली आर्ग्युमेंट के रूप में संख्याओं की एक सरणी arr और दूसरी आर्ग्युमेंट के रूप में एक संख्या num लेता है।
फ़ंक्शन को यह निर्धारित करना चाहिए कि क्या सरणी arr के तत्वों को num समूहों में वितरित करने का कोई तरीका है जिससे सभी समूहों का योग समान हो। यदि ऐसा कोई तरीका मौजूद है, तो फ़ंक्शन true वापस करे, अन्यथा false।
उदाहरण
यदि इनपुट सरणी और संख्या निम्न हैं:
const arr = [4, 6, 3, 3, 7, 4, 1]; const num = 4;
तो आउटपुट होना चाहिए:
const output = true;
क्योंकि चार समूह हैं: [7], [1, 6], [4, 3], [4, 3]
कोड
const arr = [4, 6, 3, 3, 7, 4, 1]; const num = 4; const canDivide = (arr = [], num = 1) => { const sum = arr.reduce((acc, num) => acc + num); if (sum % num !== 0 || arr.some(num => num > sum / num)) { return false; } const used = new Set(); return (function find(start, target) { if (used.size === arr.length) { return true; } if (target < 0) { return false; } if (target === 0) { return find(0, sum / num); } for (let i = start; i < arr.length; i++) { if (!used.has(i)) { used.add(i); if (find(i + 1, target - arr[i])) { return true; } used.delete(i); } } return false; })(0, sum / num); }; console.log(canDivide(arr,num));समाधान के चरण
चरण 1. यदि कुल योग
numसे विभाज्य नहीं है या कोई संख्याsum/numसे बड़ी है, तोfalseवापस करें।चरण 2. प्रयुक्त संख्याओं को ट्रैक करने के लिए HashSet का उपयोग किया।
चरण 3. उप-विभाजन खोजना शुरू किया।
यदि सभी संख्याओं का उपयोग हो गया, तो काम पूरा।
यदि उपसमुच्चय का योग बहुत बड़ा हो गया, तो खोज रोक दी।
यदि एक उपसमुच्चय मिल गया, तो तब तक खोज जारी रखी जब तक सभी संख्याओं का उपयोग न हो जाए।
अंत में, हर अप्रयुक्त संख्या को आजमाया।
आउटपुट
कंसोल में आउटपुट होगा:
true