2017.07.05 01:21


문제1 3n+1문제

출처 : http://www.programming-challenges.com/


Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1, 000, 000.

For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.

Input

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

Output

For each pair of input integers i and j, output ij in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174




# Source (My Solution)

#include 

//#define DBG

void main(void) {
	int a;
	int b;

	int tmp;
	int i;
	int x;
	int loop_count;
	int max_count =0;

	scanf("%d", &a);
	scanf("%d", &b);
	
	// If A is Biger than B,  Swap A and B
	if (a > b) {
		tmp = a;
		a = b;
		b = tmp;
	}
	
	for (i = a; i <= b; i++) {
		// Start, Init
		x = i;
		loop_count = 1;
#ifdef DBG
		printf("[%d] =============== \n", i);
#endif

		// Loop
		while (x != 1) {
			if ((x & 1) == 0) {	// even
#ifdef DBG
				printf("[%d] is EVEN\n", x);
#endif
				x = x / 2;
			}
			else {	// odd
#ifdef DBG
				printf("[%d] is ODD\n", x);
#endif
				x = (x * 3) + 1;
			}
			loop_count++;
		}

		if (max_count < loop_count)
			max_count = loop_count;

	}

	printf("%d %d %d", a,b, max_count);
	
}

 


저작자 표시
신고


Posted by injunech
2017.07.04 02:41


[초급] 문자열 비교


01. 문자열 길이 구하기
int main()
{
    char *s1 = "Hello";       // 포인터에 문자열 Hello의 주소 저장
    char s2[10] = "Hello";    // 크기가 10인 char형 배열을 선언하고 문자열 할당

    printf("strlen = %d\n", strlen(s1));    // 5 : strlen 함수로 문자열의 길이 구함
    printf("strlen = %d\n", strlen(s2));    // 5 : strlen 함수로 문자열의 길이 구함

    return 0;
} 


02. 문자열 비교하기

 값이 같으면 0, 앞에 것이 크면 1, 뒤에 것이 크면 -1

int main()
{
    // a는 ASCII 코드로 97
    // b는 ASCII 코드로 98
    // c는 ASCII 코드로 99

    printf("%d\n", strcmp("a", "a"));    //  0: a와 a는 같으므로 0
    printf("%d\n", strcmp("b", "a"));    //  1: b와 a 중에서 b가 크므로 1
    printf("%d\n", strcmp("b", "c"));    // -1: b와 c 중에서 c가 크므로 -1

    return 0;
}




저작자 표시
신고


Posted by injunech
2017.07.04 02:08


[초급] 문자열 입력받기


01. Char 변수에 문자 입력 받기

1) scanf 사용하기 (기본)
int main()
{
    char c;

    scanf("%c", &c);    // 문자를 입력받아서 변수에 저장
    printf("%c\n", c);    // 변수의 내용을 출력

    return 0;
}

 2) getchar 사용하기
int main()
{
    char c = getchar();    // 문자 하나를 입력받음
    printf("%c\n", c);
    return 0;
}



02. Char 배열에 문자열 입력 받기

int main()
{
    char string1[10];    // 크기가 10인 char형 배열을 선언
    char string2[30];    // 크기가 30인 char형 배열을 선언

    scanf("%s", string1);     // 표준 입력을 받아서 배열 형태의 문자열에 저장
    printf("%s\n", string1);  // 문자열의 내용을 출력

    scanf("%[^\n]s", string2);    // 공백까지 포함하여 문자열 입력받기
    printf("%s\n", string2);

    return 0;
}



03. 메모리 할당하여 문자열 포인터 변수에 문자열 입력 받기

 1) 오류

int main()
{
    char *string = "Hello";    // 문자열 포인터 선언, 문자열 할당

    scanf("%s", string );
    // 실행 에러,
    // 문자열 리터럴의 주소를 가르키는 포인터에 저장된 변수는 읽기만 가능하고 쓰기 불가능합니다.

    printf("%s\n", string );

    return 0;
}

 2) 정상

int main()
{
    char *string = malloc(sizeof(char) * 10);    // char 10개 크기만큼 동적 메모리 할당

    scanf("%s", string);      // 표준 입력을 받아서 메모리가 할당된 문자열 포인터에 저장
    printf("%s\n", string);   // 문자열의 내용을 출력

    free(string);    // 동적 메모리 해제
    return 0;
}


저작자 표시
신고


Posted by injunech