2009~2014/C/C++
[C언어 기출문제&풀이] Count
malu
2010. 11. 8. 19:11
프로그램 명: count
제한시간: 1 초
그림과 같은 규칙을 가지는 수열이 있다.
첫 항은 1/1 , 두 번째 항은 1/2 , 세 번째 항은 2/1 , 네 번째 항은 3/1 , 다섯번 째 항은 2/2, ...
몇 번째 항에 어떤수가 오는지를 알아내는 프로그램을 작성하시오.
입력 형식
입력은 1 부터 2 * 10
9 까지 자연수 이다.
출력 형식
출력은 아래 출력 예의 형식으로 한다.
입출력 예
입력
14
출력
14 IS 2/4
출처:acm
풀이 : 밑의 소스코드 중
14 | printf ( "%d IS %d/%d" ,n,n-sum,i+2-n+sum); |
15 | else printf ( "%d IS %d/%d" ,n,i+2-n+sum,n-sum); |
이 부분이 제일 중요하다. 문제에서 대각선으로줄 수를 세고 이 줄마다
번호로 첫번째 줄 부터 0,1,2,3,4,...,라 한다.
sum은 첫번째 줄 부터n의 숫자가 있는 곳 까지 몇개의 숫자가 있는지
확인 한 것이므로 n-sum은 찾으려고 하는 숫자가 줄에서 몇번째에
있는 지 뜻한다.
홀수 번째 줄일 때(i%2==1)의 조건문에서 n-sum은 문제를 보면 알 수
있을 것이고 i+2-n+sum 을 설명 하겠다.
n번째 수가 속해있는 줄을 x라고 하면 이 x줄의 원소들은 모두 분모+분자=i+2를
만족 한다. (i=0부터 시작하므로 1을 더 더한다.)
여기서 n번째 수가 이 줄 안에서 몇번째 있는지 빼 주면 되므로
위와 같은 식이 된다.
짝수는 위와 같은 방법으로 하되, 순서를 바꾸도록 한다.
소스코드
06 | int sum=0,i,j,k,num[2]; |
14 | printf ( "%d IS %d/%d" ,n,n-sum,i+2-n+sum); |
15 | else printf ( "%d IS %d/%d" ,n,i+2-n+sum,n-sum); |
에고 힘들다 ㅋㅋㅋㅋ 내 예상으로는 이 문제는 다 읽고 풀이 안보고 소스코드를 봐도 이해가 잘 안 될듯 하다(그냥그렇다고요.....아님말구요....)
그러니까 풀이 꼭 보세요!!