×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,394,314명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

더하기 사이클이란 다음 예문과 같다.



이런것처럼 더하는 곳의 오른쪽 수와 나온 값의 제일 오른쪽 값을 두개 붙이면서 반복하면


다시 원래의 값이 나타난다.


예문의 사이클은 4번이다.



이런것 처럼 어떤 값이 다시 원래의 값으로 돌아오게 하는 알고리즘을 작성 하는것이 문제이다.


입력되는 n은 0 <= n <= 99이다.



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
 
#include <stdio.h>
int cycle(int num)
{
 int n1,n2,ans;
 
 n1 = num/10// 10의자리수를 가져온다, ex ) 26이면 2 
 n2 = num - (n1*10); // 26에서 2*10을 한것을 빼서 6을 가져온다. 
 
 ans = (n2*10)+ (n1+n2) - (float)((n1+n2)/10*10); // 6*10 + (2+6)-(2+6)/10*10 = 60 + 8 - 0(8 / 10 몫이 0이니) 
 
//이때 (float)((n1+n2)/10*10) 이것을 한 이유는 8+4처럼 뒷자리 수가 두자리가 넘을때 12에서 10을빼 2를 만들기 위함이다.
 
 
 return ans; 
 
}
int main()
{
 int n,cn,cnt=1;
 
 scanf("%d",&n);
 
 cn = cycle(n);
 
 while(1)
 {         
  if(cn == n)
  {
   printf("%d",cnt);
   return 0;
  }   
  
  else if(cn != n)
  {
   cnt++
   cn = cycle(cn);
  }
 }
 
}
 
Crocus



- 조금더 간단한 코딩 -


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int a, b, c, num, n=1;
    scanf("%d", &num);
    a=num/10;
    b=num%10;
    c=a+b;
 
    while(1){
        if(num == b*10 + c)
            break;
        a=b;
        b=c;
        c=(a+b)%10;
        n++;
    }
    printf("%d\n", n);
    return 0;
}
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

특수 알고리즘 해결문서  (0) 2015.12.06
1~n까지의 합  (2) 2015.12.01
더하기 사이클  (0) 2015.12.01
별 찍기  (0) 2015.11.26
발산하는 점의 개수 알고리즘  (0) 2015.11.24
달팽이 수열  (0) 2015.11.24