티스토리 뷰
[문제]
어떤 정수 n에서 시작해, n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다. 이렇게 해서 새로 만들어진 숫자를 n으로 놓고, n=1 이 될때까지 같은 작업을 계속 반복한다. 예를 들어, n=22이면 다음과 같은 수열이 만들어진다.
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
n이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다. 위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때, i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.
입력 예
1 10
100 200
201 210
900 1000
출력 예
1 10 20 100 200 125 201 210 89 900 1000 174
[소스]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package Cycle; public class main_mh { public static void main(String[] args) { int inputMin = 1; int inputMax = 10; int cycleNum = 0; int cycleLeng = 0; int cycleMax = 0; for ( int i = inputMin; i <= inputMax; i++ ) { if ( i % 2 == 0 ) cycleNum = i / 2; else cycleNum = i * 3 + 1; cycleLeng++; while ( cycleNum != 1 ) { if ( cycleNum % 2 == 0 ) cycleNum = cycleNum / 2; else cycleNum = cycleNum * 3 + 1; cycleLeng++; } cycleLeng++; if ( cycleLeng > cycleMax ) { cycleMax = cycleLeng; } cycleLeng = 0; } System.out.println(inputMin + " " + inputMax + " " + cycleMax); } } | cs |
[결과]
'알고리즘' 카테고리의 다른 글
[코딩도장] 삽입정렬 응용 (0) | 2016.10.28 |
---|---|
[코딩도장] 문자열 짝수 번째 치환 (0) | 2016.10.28 |
[코딩도장] 문자열 압축 (0) | 2016.10.27 |
[코딩도장] Spiral Array (0) | 2016.10.26 |
[코딩도장] 숫자 개수 카운트 (0) | 2016.10.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- 자료구조
- 정렬
- 스택
- 작문
- VCL
- Pte
- Delphi
- 응용
- SWT
- SysUtils
- ADODB
- RA
- 독해
- System
- 대상
- 계산기
- 영어
- 말하기
- 알고리즘
- 설명
- wfd
- 일기
- tdataset
- 왕초보 영어회화 100일의 기적
- 교육센터
- 문법
- 여행영어 100일의 기적
- Reference
- 상황
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함