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

นับ a, b &c หลังจาก n วินาทีสำหรับอัตราการทำซ้ำที่กำหนดใน C++


รับสามตัวเลข '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: 0

Count of c after n seconds for given reproduction rate is: 0