ในปัญหานี้ เราได้รับค่าจำนวนเต็ม N ภารกิจของเราคือ ค้นหา nthterm ของอนุกรม −
14, 28, 20, 40, 32, 64, 56, 112….
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล
N = 6
ผลผลิต
64
แนวทางการแก้ปัญหา
ในการหาเทอมที่ N ของซีรีส์ เราต้องหาคำศัพท์ทั่วไปของซีรีส์ ซึ่งเราต้องคอยดูซีรี่ย์อย่างใกล้ชิด ฉันมองเห็นสองวิธีในการแก้ซีรีส์นี้
วิธีที่ 1
ชุดนี้เป็นส่วนผสมของชุดข้อมูลสองชุดที่ตำแหน่งคู่และคี่
ในตำแหน่งคี่ − 14, 20, 32, 56, ….
T1 = 14 T3 = 20 = T1 + 6 T5 = 32 = T3 + 12 T7 = 56 = T5 + 24 = T1 + 6 + 12 + 24 = T1 + 6*(1 + 2 + 4) TN = T1 + 6(20 + 21 + 22 +....+ 2((N/2) - 1 ) )
ตำแหน่งคู่ − 28, 40, 64, 112…
T2 = 28 T4 = 40 = T2 + 12 T6 = 64 = T4 + 24 T8 = 112 = T6 + 48 = T2 + 12 + 24 + 48 = T2 + 6*(2 + 4 + 8) TN = T2 + 6(21 + 22 +....+ 2((N/2) - 1 ) )
เทอมที่ N ของซีรีส์คือ
$\mathrm{T_{N}\, =\, T_{s}\, +\, 6\left ( \sum 2^{\left ( \left ( N/2 \right )-1 \right )} \ right )}$ โดยที่ค่าจาก s ถึง N เพิ่มขึ้น 2
สำหรับค่าคู่ s =2
สำหรับค่าคี่ s =1
ตัวอย่าง
#include <iostream>
#include <math.h>
using namespace std;
long findNthAdd(int s, int i, int n){
int sum = 0;
for(; i <= n; i+= 2){
sum += pow(2, (int)((i/2) - 1));
}
return 6*sum;
}
long findNthTermSeries(int n){
int s, i;
if(n % 2 == 0){
s = 28;
i = 4;
}
else{
s = 14;
i = 3;
}
return ( s + findNthAdd(s, i, n));
}
int main(){
int n = 15;
cout<<n<<"th term of the series is "<<findNthTermSeries(n);
return 0;
} ผลลัพธ์
15th term of the series is 776
วิธีแก้ไขอื่น
อีกวิธีหนึ่งที่ใช้หาคำศัพท์ที่ N ได้คือการใช้ความจริงที่ว่าเทอมปัจจุบันเป็นสองเท่าของเทอมก่อนหน้าหรือน้อยกว่า 8 จากเทอมก่อนหน้าโดยพิจารณาจากค่าคี่/คู่
If N is even TN = 2*T(N-1) If N is odd TN = T(N-1) - 8
ดังนั้นเราต้องวนจาก 2 ถึง N และหา Ti โดยตรวจสอบว่าเป็นคู่หรือคี่
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
bool isEven(int N){
if(N % 2 == 0)
return true;
return false;
}
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<<"th term of the series is "<<findNthTermSeries(n);
return 0;
} ผลลัพธ์
15th term of the series is 776