ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도전!프로그래밍 three
    backup/c,c++ 2009. 12. 22. 20:43

    1. 이 문제의 핵심은 (i, j)의 배열을 90도 회전시키면 (j, 3-i)가 된다는 것이다!
         for(i=0; i<4; i++)
             for(j=0; j<4 ; j++)
                arr[j][3-i] = pArr[i][j];

    2. 이 문제는 배열을 채우는 규칙성을 찾는 문제다.
       가로로 증가 -> 세로로 증가(횟수 1감소) -> 가로로 감소 -> 세로로 감소(횟수 1 감소)
       즉, 입력값이 4면 가로로 1 2 3 4(4번)가 채워지고 다음 아래로 내려가면서 5 6 7(3번)
       다시 왼쪽으로 가면서 8 9 10(3번), 위로 올라가면서 11 12(2번).......이런식이다.
       물론 구현도 쉽지 않다.. 각자 개성에 맞게 하면된다.
      while(1)
     {
          for(count=0, j+= direct; count<n; count++)   //가로로 채우기
          {
               arr[i][j] = num++;
               j += direct;
          }
          j -= direct;
          n--;    //가로 이후에 횟수 감소
          if(n==0)
               break;
          for(count=0, i+=direct;count<n;count++)  //세로로 채우기
          {
               arr[i][j] = num++;
               i += direct;
              }
         i -= direct;
         direct *= -1;      //세로 이후에 방향 전환(증가 <-> 감소)
     }
     
    3. 이건 %연산자와 나눗셈의 특징만 알고 있다면 간단한 문제다.
       즉, 나눗셈의 나머지는 나누어지는 값보다 작은 수들이다.
       따라서 99까지 나오려면 100으로 나눈 나머지를 취하면 된다.
       for(i=0; i<5; i++)
           printf("난수 출력 : %d \n", rand()%100);

    4. 3번과 같은 문제다. 단, 두개의 주사위를 던졌을 때 두 수가 항상 같으면 안되므로
        난수 생성을 따로 따로 해주면 된다.
        n1 = rand()%7;
        n2 = rand()%7;
        printf("주사위 결과 : %d, %d \n", n1, n2);

    5. 문제는 간단하지만 구현에 있어서 개인차가 많을 것으로 생각 된다.
        내 코드는 첨부파일에  


    6. 역시 개념 자체는 쉬우나 구현을 하기까지는 어려운 문제다. 한참 동안의 버그를 잡은 끝에 완성했다..
Designed by Tistory.