티스토리 뷰

알고리즘

오실로스코프 문제

path7inder 2014. 9. 18. 14:41
프로그램 명: oscilloscope
제한시간: 1 초

농부 존은 창고에서 오래된 오실로스코프 발견하였다.

존은 이 오실로스코프가 작동 하는지 확인하기 위해 자신의 소들에게 톱니파를 발생하는 전자회로를 제 작을 명령 하였다.

이 소들이 만든 전자회로는

1v(전압)를 걸때 1Vp,-1Vp, 주기가 2ms인 톱니파를 발생한다.
2v 일때 2Vp,-2Vp , 4ms
3v 일때 3Vp,-3Vp , 6ms
.........

오실로스코프의 제원은 이러하다.

  1. 10v~-10v 까지 표시
  2. 0ms~59ms 까지 표시(한칸당 1ms, 시작은 0ms,'*'로출력)
  3. 우측끝에는 전압값 표시됨( 출력형식 "|%3d")

v(1 ≤ v ≤ 59 v는 정수) 값이 입력 될때 그에 알맞는 오실로스코프의 화면을 출력 하라.

입출력 예

입력:

5

출력:

                                                            | 10V
                                                            |  9V
                                                            |  8V
                                                            |  7V
                                                            |  6V
     *         *         *         *         *         *    |  5V
    **        **        **        **        **        **    |  4V
   * *       * *       * *       * *       * *       * *    |  3V
  *  *      *  *      *  *      *  *      *  *      *  *    |  2V
 *   *     *   *     *   *     *   *     *   *     *   *    |  1V
*    *    *    *    *    *    *    *    *    *    *    *    |  0V
     *   *     *   *     *   *     *   *     *   *     *   *| -1V
     *  *      *  *      *  *      *  *      *  *      *  * | -2V
     * *       * *       * *       * *       * *       * *  | -3V
     **        **        **        **        **        **   | -4V
     *         *         *         *         *         *    | -5V
                                                            | -6V
                                                            | -7V
                                                            | -8V
                                                            | -9V
                                                            |-10V

입력:

10

출력:

          *                   *                   *         | 10V
         **                  **                  **         |  9V
        * *                 * *                 * *         |  8V
       *  *                *  *                *  *         |  7V
      *   *               *   *               *   *         |  6V
     *    *              *    *              *    *         |  5V
    *     *             *     *             *     *         |  4V
   *      *            *      *            *      *         |  3V
  *       *           *       *           *       *         |  2V
 *        *          *        *          *        *         |  1V
*         *         *         *         *         *         |  0V
          *        *          *        *          *        *| -1V
          *       *           *       *           *       * | -2V
          *      *            *      *            *      *  | -3V
          *     *             *     *             *     *   | -4V
          *    *              *    *              *    *    | -5V
          *   *               *   *               *   *     | -6V
          *  *                *  *                *  *      | -7V
          * *                 * *                 * *       | -8V
          **                  **                  **        | -9V
          *                   *                   *         |-10V

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
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
int offset; // 입력 값
 
void printStop(int V, int ms)
{    
    int curPos = ms % (2*offset); // 주기로 나눈 나머지
 
    if(curPos >= 0 && curPos < offset) // 0V부터 상승하는 구간
    {
        if(V == curPos) {
            cout << '*';
            return;
        }
    }
    if(curPos > offset && curPos < 2 * offset) // 수직으로 하락하는 구간
    {
        if(V == curPos - (2 * offset)){
            cout <<  '*';
            return;
        }
    }
    if(curPos==offset) // 바닥에서 0으로 다시 올라오는 구간
    {
        if(V >= (-1) * offset && V <= offset){
            cout << '*';
            return;
        }
    }
    cout << ' ';
}
 
int main()
{
    cin >> offset;
 
    for(int i=0; i<=20; i++) // V 증가
    {
        int V = 10 - i;
        for(int j=0; j<60; j++) // ms 증가
        {
            printStop(V,j);
        }
        printf("|%3dV\n",V); // 엔터
    }
 
    return 0;
}


'알고리즘' 카테고리의 다른 글

Collatz 추측 문제  (0) 2014.09.24
친구수 문제  (0) 2014.09.24
자물쇠 풀기 문제  (0) 2014.09.18
거듭 제곱 테이블 문제  (0) 2014.09.18
설탕공장 문제  (0) 2014.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함