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

C++에서 두 개의 숫자를 사용하여 생성할 수 있는 숫자 세기

<시간/>

세 개의 숫자 X, Y 및 N이 제공됩니다(범위 [1,N]을 정의하기 위해). 목표는 X와 Y를 사용하여 구성할 수 있는 [1,N] 범위의 모든 숫자를 찾는 것입니다.

예를 들어 X=2이고 Y=3인 경우. 숫자 6은 2를 세 번( 2+2+2 ) 또는 3을 두 번( 3+3 ) 사용하여 구성할 수 있습니다. 마찬가지로 7은 2를 두 번 사용하고 3을 한 번 사용하여 구성할 수 있습니다( 2+2+3 ).

1에서 N까지 각 숫자에서 X 또는 Y를 빼서 이 작업을 수행합니다. 마지막 숫자가 0으로 줄어들면 카운트를 증가시킵니다.

예를 들어 이해합시다.

입력

N=10 X=4, Y=3

출력

Total numbers constructed using X & Y only: 7

설명

Numbers constructed by 3 and 4 only:
3, 4, 6 (3+3), 7 (3+4), 8 (4+4), 9 (3+3+3), 10 (3+3+4)

입력

N=10 X=5, Y=4

출력

Total numbers constructed using X & Y only: 5

설명

Numbers constructed by 4 and 5 only:
4, 5, 8(4+4), 9 (4+5), 10 (5+5)

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

  • 세 개의 정수 X, Y, N을 취합니다.

  • 함수 constructNums(int n,int x,int y)는 x와 y만 사용하여 구성할 수 있는 숫자의 개수를 반환합니다.

  • 이러한 숫자에 대해 초기 변수 개수를 0으로 간주합니다.

  • for 루프를 사용하여 숫자 범위를 탐색합니다. i=1 ~ i<=n

  • 이제 각 숫자 num=i에 대해 while 루프 검사를 사용하여 num>0,

  • while(num%x==0)이고 num은 0이 아닙니다. 여기서 x를 뺍니다.

  • while(num%y==0)이고 num은 0이 아닙니다. 여기서 y를 뺍니다.

  • x와 y를 뺀 후 숫자가 둘 다로 나눌 수 없고 둘 다보다 큰 경우 x와 y를 모두 빼십시오.

  • 외부 while 루프 이후에 num이 0인지 확인합니다. x, y 또는 둘 다 num을 만들 수 있음을 의미합니다. 증분 수.

  • 모든 루프가 끝나면 총 개수가 표시됩니다.

  • 카운트를 결과로 반환합니다.

#include <bits/stdc++.h>
using namespace std;
int constructNums(int n,int x,int y){
   int count = 0;
   for (int i = 1; i <= n; i++) {
      int num = i;
      while(num>0){
         while((num%x)==0 && num!=0)
         num-=x;
         while((num%y)==0 && num!=0)
         num-=y;
         if (num>x && num>y)
            num=num-x-y;
         else
            break;
      }
      if (num==0)
         { count++;}
   }
   return count;
}
int main(){
   int N=20;
   int X=5,Y=4;
   cout <<"Total numbers constructed using X & Y only:"<<constructNums(N,X,Y);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Total numbers constructed using X & Y only:14