backup/c,c++

도전!프로그래밍 three

nuKeguyS 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. 역시 개념 자체는 쉬우나 구현을 하기까지는 어려운 문제다. 한참 동안의 버그를 잡은 끝에 완성했다..