728x90
반응형
정수 n에서 시작해 n이 짝수면 2로 나누고 홀수면 3을 곱한 다음 1을 더한다.
이렇게 해서 새로 만들어진 숫자를 n으로 놓고 n=1이 될때까지 같은 작업을 반복한다.
1이 나올때까지 만들어진 수의 개수(1포함)를 n의 사이클 길이라고 한다.
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
22의 사이클은 16
입력
- 입력은 일련의 정수 쌍 i와 j로 구성되며 한 줄에 한쌍의 수가 입력된다. 모든 정수는 1,000,000보다 작고 0보다 크다
출력
- i, j를 입력된 순서대로 출력
- i, j의 최대 사이클 길이 출력
입력 예 출력 예
1 10 1 10 20
100 200 100 200 125
210 210 201 210 89
풀이) 풀긴 했는데 http://www.programming-challenges.com 들어가서 돌려보면 계속 틀렸다고 나온다 -_-;;젠장 . 뭐가 문제야
- import java.io.*;
- class Main implements Runnable{
- static String ReadLn(int maxLength){ // utility function to read from stdin,
- // Provided by Programming-challenges, edit for style only
- byte line[] = new byte [maxLength];
- int length = 0;
- int input = -1;
- try{
- while (length < maxLength){//Read untill maxlength
- input = System.in.read();
- if ((input < 0) || (input == ' ')) break; //or untill end of line ninput
- line [length++] += input;
- }
- if ((input < 0) && (length == 0)) return null; // eof
- return new String(line, 0, length);
- }catch (IOException e){
- return null;
- }
- }
- public static void main(String args[]) // entry point from OS
- {
- Main myWork = new Main(); // Construct the bootloader
- myWork.run(); // execute
- }
- public void run() {
- new MyStuff().run();
- }
- }
- class MyStuff implements Runnable{
- public void run(){
- String input = (Main.ReadLn(20));
- calcCycle(input);
- }
- // You can insert more classes here if you want.
- public void calcCycle(String input){
- String[] inputArray = input.trim().split(" ");
- int startInput = Integer.parseInt(inputArray[0]);
- int endInput = Integer.parseInt(inputArray[1]);
- int maxCount = 0;
- int maxNumber = 0;
- if (startInput > endInput){
- int temp = endInput;
- endInput = startInput;
- startInput = temp;
- }
- while(startInput <= endInput){
- int count = 1;
- int number = startInput;
- if (number != 1){
- while (number > 1){
- if (number % 2 == 0){
- number = number /2;
- }else {
- number = number * 3 + 1;
- }
- count++;
- }
- }
- if (maxCount < count){
- maxCount = count;
- }
- startInput++;
- }
- System.out.println( inputArray[0] + " " + inputArray[1] + " " + maxCount);
- }
- }
728x90
반응형
'Development > Algorithm' 카테고리의 다른 글
에라토스테네스의 체 (0) | 2016.12.07 |
---|---|
[Try-catch]대문자 출력 (0) | 2013.11.04 |
[Programing Challenges]반전한 수 더하기 (0) | 2013.02.12 |
[Hacker Cup]Find the Min (0) | 2013.02.01 |
[Hacker Cup]Balanced Smileys (0) | 2013.01.31 |