이것이 첫 번째 질문이므로 잘 진행되기를 바랍니다.
배경:
당신이 생각하고있는 강이 아닙니다. 이 문제는 디지털 강 개념에 관한 것입니다. 디지털 강 숫자 다음 숫자의 순서입니다 n
입니다 n
플러스의 숫자의 합계입니다.
설명:
12345 다음에는 1 + 2 + 3 + 4 + 5 = 15이므로 12360이옵니다. 따라서 12345 + 15는 12360을 제공합니다. 마찬가지로 145 다음에 155가옵니다. 디지털 강의 첫 번째 숫자는 강 M
이라고합니다 M
.
예를 들어, River 480은 {480,492,507,519 ....}로 시작하는 시퀀스이고, River 483은 {483,498,519, ....}로 시작하는 시퀀스입니다. 일반 하천과 강은 만날 수 있으며 디지털 강에서도 마찬가지입니다. 이것은 두 개의 디지털 강이 동일한 값을 공유 할 때 발생합니다.
예:
480 강은 519에서 483 강과 만나고 507 강은 507에서 507 강과 만나고 481 강과 절대 만나지 않습니다. 모든 디지털 강은 결국 1 강, 3 강 또는 9 강을 만나게됩니다.
주어진 정수에 n
대해 강이 n
처음이 세 강 중 하나를 만나는 값을 결정할 수있는 프로그램을 작성하십시오 .
입력
입력에는 여러 테스트 사례가 포함될 수 있습니다. 각 테스트 사례는 별도의 줄을 차지하며 정수 n
( 1 <= n <= 16384
)를 포함합니다 . 값이 0
for 인 n
테스트 케이스는 입력 을 종료하며이 테스트 케이스는 처리되지 않아야합니다.
산출
입력의 각 테스트 케이스에 대해 먼저 샘플 출력에 표시된대로 테스트 케이스 번호 (1부터 시작)를 출력하십시오. 그런 다음 별도의 라인 출력에서 라인은 "y에서 x 강을 처음 만납니다". 여기서 y는 강이 n
처음 강을 만나는 가장 낮은 값 입니다 x
(x = 1 또는 3 또는 9). 강하면 n
강을 충족 x
에서 y
의 두 개 이상의 값에 대한 x
출력 최저값. 두 개의 연속 테스트 사례 사이에 빈 줄을 인쇄하십시오.
테스트 사례
입력:
86
12345
0
산출:
Case #1
first meets river 1 at 101
Case #2
first meets river 3 at 12423
채점 :
가장 빠른 알고리즘이 승리합니다. 넥타이의 경우. 더 짧은 코드를 가진 사람이 이길 것입니다.
내 오류를 지적한 mbomb007 에게 감사합니다 .
추신 : 가장 작은 솔루션이 아닌 가장 빠른 솔루션을 원합니다. 나는 또한 느린 해결책을 가지고 있습니다. 여기 를보십시오 .
노트 :
코드 테스트에 이것을 사용할 것 입니다. 그리고 성능 검사.
M
우리는 그것을 강M
이라고 부를 것입니다 . 둘째, 다음 단락에서 강M
은 수에서 시작하는 강을 의미합니다 M
.