입력으로 숫자 N이 주어졌습니다. 목표는 다음 조건을 만족하는 m부터 N까지의 숫자를 찾는 것입니다. 여기 N<=10 9
m + sum(m) + sum ( sum (m) ) =N. 여기서 sum(m)은 m의 자릿수의 합입니다.
m이 137이면 sum(m)=1+3+7=11이고 sum(sum(m))=sum(11)=1+1=2
예를 들어 이해합시다.
예를 들어
입력 - N=27
출력 - m + sum(m) + sum(sum(m)) =N을 만족하는 숫자의 개수:3
설명 - 숫자는 다음과 같습니다.
9 ( 9 + 9 + 9 =27 )
15 ( 15 + (1+5) + (6) =27 )
21 ( 21 + (2+1) + (3) =27 )
입력 - N=81
출력 - m + sum(m) + sum(sum(m)) =N을 만족하는 숫자의 개수:2
설명 - 숫자는 다음과 같습니다.
63 ( 63 + (6+3) + 9 =81 )
66 ( 66 + (6+6) + (1+2) =81 )
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
이 접근법에서 우리는 숫자의 자릿수의 합을 계산하고 추가된 합을 N과 비교할 것입니다. 계산된 합이 N과 같으면 카운트를 증가시킵니다. 마지막에 결과로 카운트를 반환합니다.
가장 큰 수는 10 9 일 수 있습니다. m 의 최대 자릿수 합은 81( 9*9 )이 될 수 있고 sum(sum(m)) 의 다음 최대 자릿수 합은 16( 79 의 경우 7+9 )이 될 수 있습니다. 따라서 N-97보다 작고 N보다 큰 정수는 주어진 조건을 충족하지 않으므로 N-97에서 N까지의 숫자를 확인합니다.
- 정수 N을 입력으로 사용합니다.
- 함수 total(int num)은 숫자 합계를 가져와 해당 숫자의 합계를 반환합니다.
- res_total을 자릿수의 합으로 취하고 res를 현재 나머지로 취합니다. 둘 다 0으로 초기화합니다.
- while 루프를 사용하여 각 단위 자릿수를 탐색합니다.
- 단위 숫자를 res=num % 10으로 취해 res_total에 더하세요.
- 다음 숫자를 위해 num을 10으로 줄입니다.
- 끝에 있는 num의 자릿수 합으로 res_total을 반환합니다.
- 함수 조건(int N)은 N을 취하고 m + sum(m) + sum(sum(m))을 만족하는 숫자의 개수를 반환합니다.
- 초기 카운트를 0으로 합니다.
- for 루프를 사용하여 i=N-97에서 i<=N으로 순회합니다.
- temp_1=total(i)로 자릿수 합계를 계산합니다.
- total(i)의 자릿수 합계를 total(temp_1)로 계산합니다.
- temp_3 =i + temp_1 + temp_2로 설정합니다. N과 같으면 카운트를 증가시킵니다.
- for 루프가 끝나면 결과로 카운트를 반환합니다.
예
#include <bits/stdc++.h> using namespace std; int total(int num) { int res_total = 0; int res = 0; while (num > 0) { res = num % 10; res_total = res_total + res; num = num / 10; } return res_total; } int condition(int N) { int count = 0; for (int i = N - 97; i <= N; i++) { int temp_1 = total(i); int temp_2 = total(temp_1); int temp_3 = i + temp_1 + temp_2; if (temp_3 == N) { count++; } } return count; } int main() { int N = 9999; cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N); return 0; }
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
출력
Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2