รับสามตัวเลข 'a', 'b' และ 'c' เป็นอินพุต เป้าหมายคือการหาจำนวน/ค่าของ 'a', 'b' และ 'c' หลังจาก n วินาที เพื่อให้อัตราการทำซ้ำคือ:-
- ทุกๆ a เปลี่ยนเป็น b ทุกๆ 2 วินาที
- ทุก b เปลี่ยนเป็น c ทุกๆ 5 วินาที
- ทุกๆ c เปลี่ยนเป็น 2 a หลังจากทุกๆ 12 วินาที
ให้เราเข้าใจด้วยตัวอย่าง
ตัวอย่าง
ป้อนข้อมูล - n_seconds =62 a =1 b =1 c =1
ผลลัพธ์ - จำนวนหลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:0
จำนวน b หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:33
จำนวน c หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:1
คำอธิบาย - หลังจาก 60 วินาที a จะเป็น 32, b =0, c =0
อีก 2 วินาที ตัว b ทั้งหมดจะกลายเป็น c, c=1 ทั้งหมดกลายเป็น b, b=33.
อินพุต - n_seconds =20 a =1 b =1 c =1
ผลลัพธ์ - จำนวนหลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:0
จำนวน b หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:0
จำนวน c หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดคือ:6
คำอธิบาย
1 วินาที :- a=1, b=1, c=1
2 วินาที :- a=0, b=2(1+1) , c=1 → a ถึง b หลังจาก 2 วินาที
4 วินาที :- a=0, b=2 , c=1 → a ถึง b หลังจาก 2 วินาที
5 วินาที :- a=0, b=0 , c=3 (1+2) → b ถึง c หลังจาก 5 วินาที
6 วินาที :- a=0, b=0 , c=3 → a ถึง b หลังจาก 2 วินาที
8 วินาที :- a=0, b=0 , c=3 → a ถึง b หลังจาก 2 วินาที
10 วินาที :- a=0, b=0 , c=3 → b ถึง c หลังจาก 5 วินาที
12 วินาที :- a=6 (0+2*3), b=0 , c=0 → c ถึง 2a หลังจาก 12 วินาที
14 วินาที :- a=0, b=6(0+6) , c=0 → a ถึง b หลังจาก 2 วินาที
15 วินาที :- a=0, b=0 , c=6(0+6) → b ถึง c หลังจาก 5 วินาที
16 วินาที :- a=0, b=0 , c=6 → a ถึง b หลังจาก 2 วินาที
18 วินาที :- a=0, b=0 , c=6 → a ถึง b หลังจาก 2 วินาที
20 วินาที :- a=0, b=0 , c=6 → b ถึง c หลังจาก 5 วินาที
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
LCM ของวินาทีจะเป็น 60 ( 2, 5, 12 ) ดังนั้นการเปลี่ยนแปลงใน a, b และ c ทุกๆ 60 วินาทีจะเป็น :
60 วินาที → a=32, b=0, c=0
120 วินาที → a=32*32 , b=0, c=0
180 วินาที → a=32*32*32 , b=0, c=0.
สำหรับวินาทีที่ทวีคูณของ 60 ให้คำนวณ a ด้านบน สำหรับผู้ที่ไม่ใช่ตัวคูณ ให้คำนวณหลายอุณหภูมิที่ใกล้ที่สุด จากนั้นข้ามจาก temp+1 ไปยังอินพุตวินาทีและคำนวณโดยใช้ mod 2, 5 หรือ 12
- นำตัวเลข a, b และ c เป็นอินพุต
- ใช้เวลา n_seconds เป็นวินาที
- ฟังก์ชั่นการทำสำเนา_rate(int n_seconds, int a, int b, int c) รับพารามิเตอร์ทั้งหมดและพิมพ์จำนวน a, b &c หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนด
- ใช้ temp =n_seconds / 60 เป็นทวีคูณของ 60 ด้านล่าง n_seonds
- คำนวณ a =(int)pow(32, temp) ตามที่กำหนดในสูตร ( อุณหภูมิ )
- ตอนนี้อัปเดต temp =60 * temp สำหรับผลคูณที่ใกล้เคียงที่สุดที่น้อยกว่า 60 หรือเท่ากับ n_seconds
- ตอนนี้ใช้ for loop จาก i=temp+1 ถึง i=n_seconds
- หากจำนวน i เป็นผลคูณของ 2 ให้อัปเดต b โดยเพิ่ม a และ a ด้วย 0
- หากตัวเลข i คูณด้วย 5 ให้อัปเดต c โดยเพิ่ม b และ b ด้วย 0
- หากตัวเลข i คูณด้วย 12 ให้อัปเดต a โดยเพิ่ม 2c และ c ด้วย 0
- เมื่อสิ้นสุด for loop ให้พิมพ์ค่าสุดท้ายของ a, b และ c
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; void reproduction_rate(int n_seconds, int a, int b, int c) { int temp = n_seconds / 60; a = (int) pow(32, temp); temp = 60 * temp; for (int i = temp + 1; i <= n_seconds; i++) { if (i % 2 == 0) { b = b + a; a = 0; } if (i % 5 == 0) { c = c + b; b = 0; } if (i % 12 == 0) { a = a + (2 * c); c = 0; } } cout << "Count of a after n seconds for given reproduction rate is: " << a << "\n"; cout << "Count of b after n seconds for given reproduction rate is: " << b << "\n"; cout << "Count of c after n seconds for given reproduction rate is: " << c; } int main() { int n_seconds = 72; int a = 2; int b = 1; int c = 1; reproduction_rate(n_seconds, a, b, c); return 0; }
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
ผลลัพธ์
Count of a after n seconds for given reproduction rate is: 68 Count of b after n seconds for given reproduction rate is: 0Count of c after n seconds for given reproduction rate is: 0