[C언어] 정보올림피아드 문제 풀이 (사각형 그리기, 최대값, 윤년, 소수, 용액, 마방진)
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[C언어] 정보올림피아드 문제 풀이 (사각형 그리기, 최대값, 윤년, 소수, 용액, 마방진)에 대한 보고서 자료입니다.

목차

1.사각형 그리기
정사각형의 한 변의 길이 n과 종류 m을 입력받은 후 다음과 같은 정사각형 형태로 출력하는 프로그램을 작성하시오.

2.최대값
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

3.윤년
현재 사람이 살고 있는 년도 B와 그 사람이 태어난 년도 A가 주어질 때, 그 사이에 포함된 윤년의 수가 몇인지 알아보는 프로그램을 작성하라.

4.소수
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최소값을 찾는 프로그램을 작성하시오.

5.용액
KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000 까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000 까지의 음의 정수로 나타낸다.

6.마방진
홀수 정사각형의 크기를 입력 받은 후, 가로 세로 대각선의 합이 일정한 마방진을 출력하는 프로그램을 작성하시오.

본문내용

찾는 프로그램을 작성하시오.첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 서로 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액의 특성값을 출력한다. 출력해야하는 두 용액은 특성값의 오름차순으로 출력한다. 특성값이 0 에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.
소스
#include
void conbine(const int a[], int x);
void main() {
int a[100000]={0};
int x;
int i;
for(i=0; i<1; i++) {
printf("몇개의 용액을 쓸것인가요?(2개 이상 10만 이하) : ");
scanf("%d",&x);
if(x>100000 || x<2) {
i--;
printf("잘못된 입력입니다.\n\n"); // 잘못된 값이면 다시
continue;
}
}
for(i=0; i {
printf("용액의 특성값을 입력하세요(-10억~10억) : ");
scanf("%d",&a[i]);
if(a[i]>1000000000 || a[i]<-100000000) {
i--;
printf("잘못된입력입니다.\n"); // 잘못된 값이면 다시
continue;
}
}
conbine(a,x);
}
void conbine(const int a[], int x)
{
int i,j;
int result=0;
int min;
int m1,m2;
min=a[1]+a[2]; // 일단 최소값을 설정
m1=a[1]; // 일단 최소값을 설정
m2=a[2]; // 일단 최소값을 설정
if(min<0) min=min*(-1); // 처음에 설정한 최소값이 음수일 경우 양수로 변환
for(i=0; i {
for(j=i+1; j {
result=a[i]+a[j]; // 일단 배열을 더해서
if(result<0) result=result*(-1); // 그 배열이 음수인경우 양수로 바꿈
if(result min=result;
m1=a[i];
m2=a[j];
}
}
}
printf("0에 가장 가까운 조합 : %d %d\n",m1,m2); // 최소값 출력
}
문제6 : 마방진홀수 정사각형의 크기를 입력 받은 후, 가로 세로 대각선의 합이 일정한 마방진을 출력하는 프로그램을 작성하시오.
마방진이란 1부터 N*N까지의 숫자를 한 번씩만 써서 정사각형에 배치하여 가로와 세로, 그리고 대각선의 합이 같도록 하는 것이다.
다음의 순서에 따라 각 위치에 차례대로 값을 넣는다.1. 첫 번째 숫자인 1을 넣는 위치는 첫 번째 행 가운데이다.2. 숫자가 N의 배수이면 바로 아래의 행으로 이동하여 다음의 수를 넣고3. 그렇지 않으면 왼쪽 위로 이동하여 다음의 숫자를 넣는다. 만약 행이 첫 번째를 벗어나면 마지막 행으로 이동하고, 열이 첫 번째를 벗어나면 마지막 열로 이동한다.
1. 첫 번째 행 가운데(1,2)에 1을 넣는다.2. 왼쪽 위로 이동하면 (0,1)인데 행의 위치가 처음을 벗어났으므로 마지막행(3,1)의 위치로 이동하여 2를 넣는다.3. 왼쪽 위로 이동하면 (2,0)인데 열의 위치가 처음을 벗어났으므로 마지막열(2,3)의 위치로 이동하여 3을 넣는다.4. 배열에 넣은 값(3)이 N의 배수이므로 바로 아래행으로(3,3) 이동하여 4를 넣는다.5. 왼쪽 위로 이동하여 (2,2) 5를 넣는다.6. 왼쪽 위로 이동하여 (1,1) 6를 넣는다.7. 배열에 넣은 값(6)이 N의 배수이므로 바로 아래행으로(2,1) 이동하여 7을 넣는다.8. 왼쪽 위로 이동하면 (1,0)인데 열의 위치가 처음을 벗어났으므로 마지막열(1,3)의 위치로 이동하여 8을 넣는다.9. 왼쪽 위로 이동하면 (0,2)인데 행의 위치가 처음을 벗어났으므로 마지막행(3,2)의 위치로 이동하여 9를 넣는다.
정사각형의 크기 n(2부터 100사이의 홀수)을 입력받는다.
위에서 언급한 형태로 정사각형의 내부 숫자를 차례로 채운 후의 모습을 출력한다. 숫자 사이는 공백으로 구분한다.
소스
#include
void square(int a[][100], int n);
void main()
{
int a[100][100]={0};
int n,i;
for(i=0; i<1; i++)
{
printf("1~100사이의 홀수를 입력하세요 : ");
scanf("%d",&n);
if(n>100 || n<1 || (n%2==0) ) {
i--;
printf("잘못된 입력입니다.\n"); // 잘못된 입력이면 다시 하게
continue;
}
}
square(a,n);
}
void square(int a[][100], int n)
{
int i,j,x;
int min=1; // 입력되는 값
i=0; // 마방진 행의 시작 위치
j=(0+n)/2; // 마방진 열의 시작 위치
for(x=0; x {
a[i][j]=min; // 맨처음 1은 가장 첫번째 행의 가운데 열
if(min%n==0) i++; // 입력된 값이 마방진 값의 배수이면 행을 한칸 밑으로
else {
i--; j--; // 배수가 아닌 경우 대각선으로 한칸 위
}
if(i<0) i=n-1; // 만약 행이 배열을 벗어나는 경우, 행을 최대값으로
if(j<0) j=n-1; // 만약 열이 배열을 벗어나는 경우, 열을 최대값으로
min++; // 입력되는 값을 1증가해서 1,2,3~ 이런식으로 순서대로 입력
}
for(i=0; i for(j=0; j printf("%5d",a[i][j]); // 마방진 출력
printf("\n");
}
}

키워드

  • 가격4,000
  • 페이지수17페이지
  • 등록일2013.12.17
  • 저작시기2013.5
  • 파일형식한글(hwp)
  • 자료번호#898172
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니