समस्या विवरण
इस समस्या में, हमें एक पूर्णांक मान N दिया गया है। हमारा कार्य श्रृंखला का Nवां पद ज्ञात करना है:
14, 28, 20, 40, 32, 64, 56, 112...
उदाहरण
इनपुट
N = 6
आउटपुट
64
हल का दृष्टिकोण
श्रृंखला के Nवें पद को खोजने के लिए हमें श्रृंखला का सामान्य पद खोजने की आवश्यकता है। इसके लिए हमें श्रृंखला को ध्यान से देखना होगा। मैं श्रृंखला को हल करने के दो अलग-अलग तरीके देख सकता हूं।
विधि 1: दो अलग-अलग श्रृंखलाएं (सम और विषम स्थितियां)
श्रृंखला सम और विषम स्थितियों पर दो अलग-अलग श्रृंखलाओं का मिश्रण है।
विषम स्थितियों पर: 14, 20, 32, 56, ...
T₁ = 14 T₃ = 20 = T₁ + 6 T₅ = 32 = T₃ + 12 T₇ = 56 = T₅ + 24 = T₁ + 6 + 12 + 24 = T₁ + 6×(1 + 2 + 4) Tₙ = T₁ + 6(2⁰ + 2¹ + 2² + ... + 2^((N/2) - 1))
सम स्थितियों पर: 28, 40, 64, 112...
T₂ = 28 T₄ = 40 = T₂ + 12 T₆ = 64 = T₄ + 24 T₈ = 112 = T₆ + 48 = T₂ + 12 + 24 + 48 = T₂ + 6×(2 + 4 + 8) Tₙ = T₂ + 6(2¹ + 2² + ... + 2^((N/2) - 1))
श्रृंखला का Nवां पद है:
Tₙ = Tₛ + 6(Σ 2^((N/2)-1)), जहां मान s से N तक 2 से बढ़ते हैं।
सम मानों के लिए s = 2, विषम मानों के लिए s = 1।
विधि 2: पुनरावर्ती संबंध (सरल)
एक और तरीका, जिससे Nवां पद खोजा जा सकता है, वह यह तथ्य है कि वर्तमान पद या तो पिछले पद का दोगुना है या पिछले पद से 8 कम है, इस आधार पर कि यह सम/विषम है।
यदि N सम है: Tₙ = 2 × Tₙ₋₁ यदि N विषम है: Tₙ = Tₙ₋₁ - 8
इसलिए, हमें 2 से N तक लूप करना होगा, और सम/विषम की जांच करके Tᵢ खोजना होगा।
C++ कार्यान्वयन (विधि 2 - सरल)
#include <iostream>
using namespace std;
bool isEven(int N) {
return (N % 2 == 0);
}
int findNthTermSeries(int n) {
int termN = 14;
for (int i = 2; i <= n; i++) {
if (isEven(i))
termN *= 2;
else
termN -= 8;
}
return termN;
}
int main() {
int n = 15;
cout << n << "वां श्रृंखला का पद है " << findNthTermSeries(n);
return 0;
}
आउटपुट
15वां श्रृंखला का पद है 776
जटिलता विश्लेषण
- समय जटिलता: O(N)
- स्पेस जटिलता: O(1)
पैटर्न सारांश
| पद | मान | नियम |
|---|---|---|
| 1 | 14 | प्रारंभ |
| 2 | 28 | 14 × 2 |
| 3 | 20 | 28 - 8 |
| 4 | 40 | 20 × 2 |
| 5 | 32 | 40 - 8 |
| 6 | 64 | 32 × 2 |