일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 제어문
- 참조은요양병원
- For문
- API
- IT
- C
- 정보올림피아드
- if문
- 독후감
- Linux
- 풀이&소스코드저작권:왕유승
- 배열
- c언어
- 리눅스 명령어
- 다중반복문
- 독서 감상문
- 수학영재원
- 영재교육원
- 리눅스
- DBMS
- 반복문
- 정보과학
- 정보영재원
- 백도어
- 알고리즘
- Backdoor
- 문제출저:www.dovelet.com
- 프로그래밍
- C++
- 자료구조
Archives
- Today
- Total
되는대로 살자
[C언어 기출문제&풀이] Count 본문
프로그램 명: count
제한시간: 1 초
그림과 같은 규칙을 가지는 수열이 있다.
첫 항은 1/1 , 두 번째 항은 1/2 , 세 번째 항은 2/1 , 네 번째 항은 3/1 , 다섯번 째 항은 2/2, ...
몇 번째 항에 어떤수가 오는지를 알아내는 프로그램을 작성하시오.
입력 형식
입력은 1 부터 2 * 109 까지 자연수 이다.출력 형식
출력은 아래 출력 예의 형식으로 한다.입출력 예
입력 14 출력 14 IS 2/4
출처:acm
풀이 : 밑의 소스코드 중
13
if
(i%2==1)
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번째 수가 이 줄 안에서 몇번째 있는지 빼 주면 되므로
위와 같은 식이 된다.
짝수는 위와 같은 방법으로 하되, 순서를 바꾸도록 한다.
소스코드
01
#include <stdio.h>
02
03
int
main()
04
{
05
unsigned
long
n;
06
int
sum=0,i,j,k,num[2];
07
scanf
(
"%d"
,&n);
08
for
(i=0;i<=n;i++)
09
{
10
sum+=i;
11
if
(sum+i+1>=n)
12
{
13
if
(i%2==1)
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);
16
break
;
17
}
18
}
19
}
에고 힘들다 ㅋㅋㅋㅋ 내 예상으로는 이 문제는 다 읽고 풀이 안보고 소스코드를 봐도 이해가 잘 안 될듯 하다(그냥그렇다고요.....아님말구요....)
그러니까 풀이 꼭 보세요!!
'2009~2014 > C/C++' 카테고리의 다른 글
[C언어 기출문제&풀이] 개미 (미완) (0) | 2010.11.09 |
---|---|
[C언어 기출문제&풀이] Ant on a Chessboard (0) | 2010.11.08 |
[C언어 기출문제&풀이] number steps (0) | 2010.11.08 |
[C언어] 랜덤 변수 만들기 (0) | 2010.11.06 |
[C언어] 반올림 하는 방법 (3) | 2010.11.06 |