세 개의 숫자 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