Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวน a, b และ c หลัง n วินาทีตามอัตราการสืบพันธุ์ใน C++

กำหนดตัวเลขสามตัว 'a', 'b' และ 'c' เป็นอินพุต เป้าหมายคือหาจำนวน/ค่าของ 'a', 'b' และ 'c' หลังจาก n วินาที โดยที่อัตราการสืบพันธุ์คือ:-

  • ทุก a จะกลายเป็น b ทุกๆ 2 วินาที
  • ทุก b จะกลายเป็น c ทุกๆ 5 วินาที
  • ทุก c จะกลายเป็น 2 a ทุกๆ 12 วินาที

ทำความเข้าใจด้วยตัวอย่าง

ตัวอย่าง

Input - n_seconds = 62, a = 1, b = 1, c = 1

Output - จำนวน a หลัง n วินาทีตามอัตราการสืบพันธุ์คือ: 0

จำนวน b หลัง n วินาทีตามอัตราการสืบพันธุ์คือ: 33

จำนวน c หลัง n วินาทีตามอัตราการสืบพันธุ์คือ: 1

คำอธิบาย - หลังจาก 60 วินาที a จะเป็น 32, b = 0, c = 0

หลังจากอีก 2 วินาที ทุก b จะกลายเป็น c, c = 1 ทุก a กลายเป็น b, b = 33

Input - n_seconds = 20, a = 1, b = 1, c = 1

Output - จำนวน a หลัง 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 แล้ววนจาก temp+1 ถึงวินาทีอินพุตและคำนวณโดยใช้ mod 2, 5 หรือ 12

  • รับตัวเลข a, b และ c เป็นอินพุต
  • รับ n_seconds เป็นเวลาในวินาที
  • ฟังก์ชัน reproduction_rate(int n_seconds, int a, int b, int c) รับพารามิเตอร์ทั้งหมดและพิมพ์จำนวน a, b และ c หลัง n วินาทีตามอัตราการสืบพันธุ์
  • รับ temp = n_seconds / 60 เป็นพหุคูณของ 60 ที่น้อยกว่า n_seconds
  • คำนวณ a = (int)pow(32, temp) ตามสูตร (a^temp)
  • อัปเดต temp = 60 * temp สำหรับพหุคูณของ 60 ที่ใกล้ที่สุดน้อยกว่าหรือเท่ากับ n_seconds
  • ตอนนี้วนลูป for จาก 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: 0 
Count of c after n seconds for given reproduction rate is: 0