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

C++에서 m + sum(m) + sum(sum(m)) =N을 만족하는 숫자의 개수

<시간/>

입력으로 숫자 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