>백엔드 개발 >C++ >반복되는 숫자에서 1의 최소 개수

반복되는 숫자에서 1의 최소 개수

PHPz
PHPz앞으로
2023-09-06 17:21:091243검색

반복되는 숫자에서 1의 최소 개수

이 문제에서는 가장 작은 단위로 1이라는 숫자만 출력하면 됩니다.

reunit은 일반 수학에서 11, 111 또는 1111과 같이 숫자 1만 있는 양수입니다. 재회 형태는 $mathrm{(10*n-1)/9}$

$mathrm{(10*10-1)/9}$는 11을 제공합니다.

$mathrm{(10*100-1)/9}$는 111을 제공합니다.

$mathrm{(10*1000-1)/9}$는 1111을 제공합니다.

위 질문은 단위 자릿수가 3인 양의 정수 N이 주어지며 주어진 숫자 N으로 나누어질 수 있는 가장 작은 단위를 결정해야 한다는 점을 지적합니다.

예를 들어

N=13이라고 하면.

출력: 6

N, 즉 13은 111111의 완전약수이므로 8547이 됩니다.

111111은 13으로 나눌 수 있는 가장 작은 무게 단위입니다. 따라서 가장 작은 가중치 단위의 1의 개수는 6이므로 원하는 출력을 얻을 수 있습니다.

알고리즘

반복 횟수는 1, 11, 111, 1111 등이라는 것을 알고 있기 때문입니다. x 이후의 재결합은 $mathrm{(x*10+1)}$로 정의될 수 있습니다.

이 알고리즘은 정수 N이 나머지 rem을 남기면 재결합된 나머지는 항상 $mathrm{(rem*10+1)%N}$라는 개념에만 기반을 두고 있습니다.

재결합 횟수를 구하는 것은 숫자가 매우 클 수 있기 때문에 너무 지루할 수 있으므로 나머지가 0이 될 때까지 업데이트하고 각 업데이트 단계마다 1의 수를 세어 답을 찾을 것입니다. 나머지를 0으로 만드는 데 필요한 반복 횟수는 가장 작은 가중치 단위에서 1의 개수가 됩니다.

다음은 알고리즘에 대한 단계별 설명입니다.

  • 1단계각 N의 나머지를 저장하려면 나머지 변수를 1로 선언합니다. iteration 및 itr은 반복 횟수를 계산하기 위해 1입니다.

  • 2단계나머지가 0이 될 때까지 while 루프를 사용합니다. p>

  • 3단계 모든 단계에서 나머지를 업데이트하고 itr을 1씩 늘립니다.

  • 4단계나머지가 0이 되면 itr을 반환합니다.

N=13으로 이 접근 방식을 시도해 보겠습니다.

while 루프 이전에 나머지와 itr을 1로 선언하기 때문입니다.

지금,

  • 첫 번째 반복에서 나머지는 (remainder*10+1)%N, 즉 11이 됩니다. 나머지는 11이고 itr은 2입니다. 나머지가 0이 될 때까지 동일한 알고리즘을 따릅니다.

  • 반복 2에서 나머지=7, itr=3

  • 반복 3에서 나머지=6, itr=4

  • 반복 4에서 나머지=9, itr=5

  • 반복 5에서 나머지는 0이고 itr은 6입니다.

나머지가 0이 되므로 원하는 출력인 itr, 즉 6을 반환합니다.

방법

다음은 위 메서드를 C++로 구현한 것입니다.

으아악

출력

으아악

23으로 나눌 수 있는 최소 단위는 22개로 구성됩니다.

결론

위 글에서 우리는 한자리 3의 양의 정수 N으로 나누어질 수 있는 가장 작은 단위의 수를 찾는 문제를 해결하려고 했습니다. 이 기사가 이 문제의 개념을 명확히 하는 데 도움이 되기를 바랍니다.

위 내용은 반복되는 숫자에서 1의 최소 개수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제