Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 재생률에 대해 n초 후 a, b 및 c의 수

<시간/>

세 개의 숫자 'a', 'b' 및 'c'가 입력으로 주어집니다. 목표는 재생산 비율이 다음과 같이 되도록 n초 후에 'a', 'b' 및 'c'의 개수/값을 찾는 것입니다.

  • Every 2초마다 b로 변경
  • 모든 b는 5초마다 c로 변경됩니다.
  • 모든 c는 12초마다 2로 변경됩니다.

예를 들어 이해합시다.

예를 들어

입력 - n_초 =62 a =1 b =1 c =1

출력 - 주어진 재생률에 대한 n초 후의 횟수:0

주어진 재생률에 대해 n초 후 b의 수는 다음과 같습니다. 33

주어진 재생률에 대해 n초 후 c의 수는 다음과 같습니다. 1

설명 - 60초 후에 a는 32, b =0, c =0이 됩니다.

2초 후에 모든 b는 c, c=1이 됩니다. 모두 b, b=33이 됩니다.

입력 - n_초 =20 a =1 b =1 c =1

출력 - 주어진 재생률에 대한 n초 후의 횟수:0

주어진 재생률에 대해 n초 후 b의 수는 다음과 같습니다. 0

주어진 재생률에 대해 n초 후 c의 수는 다음과 같습니다. 6

설명

1초 :- a=1, b=1, c=1

2초 :- a=0, b=2(1+1) , c=1 → 2초 후 a에서 b로

4초 :- a=0, b=2 , c=1 → 2초 후 a에서 b로

5초 :- a=0, b=0 , c=3 (1+2) → 5초 후 b에서 c로

6초 :- a=0, b=0 , c=3 → 2초 후 a에서 b로

8초 :- a=0, b=0 , c=3 → 2초 후 a에서 b로

10초 :- a=0, b=0 , c=3 → 5초 후 b에서 c로

12초 :- a=6 (0+2*3), b=0 , c=0 → c에서 12초 후 2a

14초 :- a=0, b=6(0+6) , c=0 → 2초 후 a에서 b로

15초 :- a=0, b=0 , c=6(0+6) → 5초 후 b에서 c로

16초 :- a=0, b=0 , c=6 → 2초 후 a에서 b로

18초 :- a=0, b=0 , c=6 → 2초 후 a에서 b로

20초 :- a=0, b=0 , c=6 → 5초 후 b에서 c로

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

초의 LCM은 60( 2, 5, 12 )입니다. 따라서 60초마다 a, b 및 c의 변경 사항은 다음과 같습니다.

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를 사용하여 계산합니다.

  • 숫자, b, c를 입력하세요.
  • n_seconds를 초 단위로 계산합니다.
  • Replication_rate(int n_seconds, int a, int b, int c) 함수는 모든 매개변수를 취하고 주어진 재생률에 대해 n초 후에 a, b 및 c의 개수를 인쇄합니다.
  • temp =n_seconds / 60을 n_seconds 아래의 60의 배수로 취합니다.
  • 수식에 주어진 대로 a =(int)pow(32, temp)를 계산합니다. ( 임시 )
  • 이제 temp =60 * n_seconds보다 작거나 같은 60의 가장 가까운 배수에 대한 온도를 업데이트합니다.
  • 이제 for 루프를 사용하여 i=temp+1에서 i=n_seconds까지 순회합니다.
  • i가 2의 배수이면 a와 a를 0으로 추가하여 b를 업데이트합니다.
  • i가 5의 배수이면 b와 b를 0으로 추가하여 c를 업데이트합니다.
  • 숫자 i가 12의 배수이면 2c와 c를 0으로 추가하여 a를 업데이트합니다.
  • for 루프의 끝에서, 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