숫자의 합은 숫자의 디지털 근을 찾을 수 있습니다. 합계가 한 자리 숫자이면 디지털 근입니다. 이 튜토리얼에서 우리는 숫자의 범위와 정수 X가 주어지는 문제에 대해 논의할 것이고, 범위에서 몇 개의 숫자가 X와 같은 디지털 근을 가지고 있는지 계산해야 합니다. 여기서 X는 한 자리 숫자입니다. 예를 들면
입력:l =13, r =25, X =4출력:2설명:자릿수 합이 4인 범위 (13,25)의 숫자는 13과 22입니다.입력:l =11, r =57출력:6사전>해결책을 찾기 위한 접근 방식
간단한 접근
간단한 접근 방식으로 l에서 r까지의 숫자를 탐색하고 그 합이 X와 같은지 확인할 수 있습니다. 그러나 이것은 N이 범위의 총 숫자인 O(N)의 시간 복잡도를 생성합니다.
효율적인 접근
디지털 루트가 X인 범위에서 숫자를 찾으려면 범위에 있는 모든 숫자의 자릿수 합이 K인지 여부와 자릿수의 합이 항상 num % 9이고 나머지가 9이면 9인지 확인해야 합니다. 0이 나오므로 X =9이면 0으로 변경합니다.
숫자의 개수를 찾기 위해 전체 범위를 9의 그룹으로 나눕니다. 그러면 각 그룹에는 모듈로 9가 X와 같은 정확히 하나의 숫자가 있게 됩니다. 그런 다음 그룹에 없는 왼쪽된 숫자를 확인합니다. num % 9 =X의 조건을 만족하도록 각 숫자를 개별적으로 확인하십시오.
예
위 접근 방식에 대한 C++ 코드
#include#define ll long long intusing 네임스페이스 std;int main(){ int l =13; 정수 r =25; 정수 X =4; (X ==9) X =0이면; // 범위의 모든 숫자를 셉니다. int total =r - l + 1; // 숫자를 최대 9개의 그룹으로 나눕니다. int groups =total/ 9; // N 그룹의 경우 모듈로 9가 X와 같은 N 숫자가 있기 때문에 int result =groups; // 남겨진 모든 숫자를 확인합니다. int left_out =total % 9; // 조건에 대해 각각의 누락된 숫자를 개별적으로 확인합니다. for (int i =r; i> r - left_out; i--) { int rem =i % 9; if (rem ==X) 결과++; } cout <<"주어진 Digital Root(X)가 있는 Range( l, r )의 총 수는 다음과 같습니다. " < 출력
주어진 디지털 근(X)이 있는 범위( l, r )의 총 수:2결론
이 튜토리얼에서 우리는 숫자의 범위와 디지털 루트의 문제에 대해 논의했습니다. 디지털 근이 X인 모든 숫자를 찾아야 합니다. 우리는 이 문제를 9자리 그룹으로 나누어 이 문제를 해결하기 위한 간단한 접근 방식과 효율적인 접근 방식에 대해 논의했습니다.
각 그룹에는 X가 디지털 루트인 하나의 숫자가 포함되어 있습니다. 우리는 또한 이 문제에 대해 C, Java, Python 등과 같은 프로그래밍 언어로 수행할 수 있는 C++ 프로그램에 대해 논의했습니다. 이 튜토리얼이 도움이 되기를 바랍니다.