Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm số hạng thứ n của chuỗi 1 2 2 4 4 4 4 8 8 8 8 8 8 8 8 8…

Trong bài toán này, chúng ta được cho một số nguyên N. Nhiệm vụ của chúng ta là tạo một chương trình để Tìm số hạng thứ N của chuỗi 1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8…

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

N = 7

Đầu ra

4

Phương pháp tiếp cận giải pháp

Một cách tiếp cận đơn giản để giải quyết vấn đề là sử dụng một vòng lặp để tìm số hạng ở vị trí thứ n. Các điều khoản sẽ được cập nhật bằng cách nhân đôi sau mỗi lần lặp lại. Và thêm nó vào bộ đếm kỳ hạn.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
using namespace std;
int calcNthTerm(int N) {
   int termCounter = 0, termValue = 1;
   while (termCounter < N) {
      termCounter += k;
      termValue *= 2;
   }
   return termValue / 2;
}
int main() {
   int N = 10;
   cout<<N<<"th term of the series is "<<calcNthTerm(N);
   return 0;
}

Đầu ra

10th term of the series is 8

Phương pháp tiếp cận hiệu quả

Một cách tiếp cận hiệu quả để giải quyết vấn đề là tìm thuật ngữ chung của chuỗi.

Here, are terms and their last index,
1 -> last index = 1.
2 -> last index = 3.
4 -> last index = 7.
8 -> last index = 15.
.
.
T(N) -> last index = 2*(T(N)) - 1
Also, T(N) is always of a power of 2, i.e. T(N) = 2m
2m lies in the series till the index 2m+1-1.

Để tìm số hạng, chúng ta có thể tính giá trị của 2 (m) - 1 sử dụng N.

Điều này làm cho 2 m - 1

2m - 1 < N
So, m < log2(N + 1)

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
#include <math.h>
using namespace std;
int calcNthTerm(int N) {
   return ( pow(2, (floor)(log(N + 1) / log(2)) ) ) ;
}
int main() {
   int N = 10;
   cout<<N<<"th term of the series is "<<calcNthTerm(N);
   return 0;
}

Đầu ra

10th term of the series is 8