Cho ba số 'a', 'b' và 'c' làm đầu vào. Mục đích là tìm số / giá trị của 'a', 'b' và 'c' sau n giây sao cho tốc độ tái tạo là:-
- Mỗi a thay đổi thành b sau mỗi 2 giây
- Mỗi b thay đổi thành c sau mỗi 5 giây
- Mỗi c thay đổi thành 2 a sau mỗi 12 giây.
Hãy cho chúng tôi hiểu với các ví dụ.
Ví dụ
Đầu vào - n_seconds =62 a =1 b =1 c =1
Đầu ra - Đếm a sau n giây cho tốc độ tái tạo đã cho là:0
Đếm b sau n giây cho tốc độ tái tạo đã cho là:33
Đếm c sau n giây cho tốc độ tái tạo đã cho là:1
Giải thích - Sau 60 giây, số a sẽ là 32, b =0, c =0.
Sau 2 giây nữa, tất cả b sẽ trở thành c, c =1. Tất cả a trở thành b, b =33.
Đầu vào - n_seconds =20 a =1 b =1 c =1
Đầu ra - Đếm a sau n giây cho tốc độ tái tạo đã cho là:0
Đếm b sau n giây cho tốc độ tái tạo đã cho là:0
Đếm c sau n giây cho tốc độ tái tạo đã cho là:6
Giải thích
1 giây:- a =1, b =1, c =1
2 giây:- a =0, b =2 (1 + 1), c =1 → a đến b sau 2 giây
4 giây:- a =0, b =2, c =1 → a đến b sau 2 giây
5 giây:- a =0, b =0, c =3 (1 + 2) → b đến c sau 5 giây
6 giây:- a =0, b =0, c =3 → a đến b sau 2 giây
8 giây:- a =0, b =0, c =3 → a đến b sau 2 giây
10 giây:- a =0, b =0, c =3 → b đến c sau 5 giây
12 giây:- a =6 (0 + 2 * 3), b =0, c =0 → c đến 2a sau 12 giây
14 giây:- a =0, b =6 (0 + 6), c =0 → a đến b sau 2 giây
15 giây:- a =0, b =0, c =6 (0 + 6) → b đến c sau 5 giây
16 giây:- a =0, b =0, c =6 → a đến b sau 2 giây
18 giây:- a =0, b =0, c =6 → a đến b sau 2 giây
20 giây:- a =0, b =0, c =6 → b đến c sau 5 giây
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
LCM của giây sẽ là 60 (2, 5, 12). Vì vậy, các thay đổi trong a, b và c sau mỗi 60 giây sẽ là:
60 giây → a =32, b =0, c =0
120 giây → a =32 * 32, b =0, c =0
180 giây → a =32 * 32 * 32, b =0, c =0.
Đối với giây là bội số của 60, hãy tính a như trên. Đối với không bội số, hãy tính toán nhiều nhiệt độ gần nhất và sau đó chuyển từ nhiệt độ + 1 đến giây đầu vào và tính toán bằng cách sử dụng mod 2, 5 hoặc 12.
- Lấy các số a, b và c làm đầu vào.
- Lấy n_seconds tính bằng giây.
- Hàm tái tạo_tốc độ (int n_seconds, int a, int b, int c) nhận tất cả các tham số và in ra số lượng a, b &c sau n giây đối với tốc độ tái tạo đã cho.
- Lấy temp =n_seconds / 60 làm bội số của 60 dưới n_seonds.
- Tính a =(int) pow (32, temp) như đã cho trong công thức. (một tạm thời )
- Bây giờ, hãy cập nhật temp =60 * temp cho bội số gần nhất của 60 nhỏ hơn hoặc bằng n_ giây.
- Hiện đang duyệt bằng vòng lặp for từ i =temp + 1 đến i =n_seconds.
- Nếu số i là bội của 2 thì cập nhật b bằng cách thêm a và a với 0.
- Nếu số i là bội của 5 thì cập nhật c bằng cách thêm b và b với 0.
- Nếu số i là bội số của 12 thì hãy cập nhật a bằng cách thêm 2c và c với 0.
- Ở cuối vòng lặp for, in ra các giá trị cuối cùng của a, b và c.
Ví dụ
#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; }
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Đầu ra
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