되는대로 살자

[C언어 기출문제&풀이] 최대 수 연결 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 최대 수 연결

malu 2010. 11. 2. 21:44
프로그램 명: mchain
제한시간: 1 초

두 양의 정수가 주어질 때 두 수의 길이는 다음과 같이 약속

  • 앞수에서 뒤수를 빼가는 과정을 반복.
  • 뺀 값이 음수이면 종료 아니면 반복

예를 들어 , 두 수가 5 3 이면

5 3 2 1 1 0 1
5 3 의 길이는 이어지는 수의 개수 7 .

n 이 입력으로 주어질 때 두 번째수를 1 , 2 , .. n 으로 줄 때 최대 길이를 구하는게 문제이다.

n 이 5 이면

  • 5 1 4
  • 5 2 3
  • 5 3 2 1 1 0 1
  • 5 4 1 3
  • 5 5 0 5
최대 길이는 5 3 일 때 7 이다.

입력

n 은 1000 이하의 자연수이다.

출력

최대 길이를 출력한다.

입출력 예

입력

5

출력

7

풀이 : 각 각의 상황별로 반복문으로 실행 해 보면서 배열로 각각의 길이를 저장한 다음 그 배열의 숫자들을
비교하여 가장 큰 값을 출력한다.

소스코드

01 #include <stdio.h>
02   
03 int main()
04 {
05     int i,y,Input,FrontNum,RearNum,Temp,LoopCount;
06     int MaxLoopCount;
07     scanf("%d",&Input);
08   
09     MaxLoopCount = 0;
10   
11     for(i=1;i <= Input;i++)
12     {
13         FrontNum = Input;
14         RearNum = i;
15         LoopCount = 1;
16 //      printf("\n %d", FrontNum);
17         while(true)
18         {
19             LoopCount++;
20 //          printf(" %d:%d", RearNum,LoopCount);
21             Temp = RearNum;
22               
23             if (FrontNum - RearNum < 0)
24             {
25                 if (LoopCount > MaxLoopCount)
26                     MaxLoopCount = LoopCount;
27                 break;
28             }
29             RearNum = FrontNum - RearNum;
30             FrontNum = Temp;            
31         }
32     }
33     printf("\n%d", MaxLoopCount);
34 }