목적
  - 최대공약수와 공약수의 원리를 이해하고 C 에 적용시킨다.

문제
사용자 삽입 이미지

코드

#include <iostream>

using namespace std;

int main(void)
{
 int iA, iB, iC, iMin, iMax, i, iGCM;
 iA = iB = iC = iMin = iMax = iGCM = 0;
 i = 1;

 cout << "세 정수값을 입력하세요 : ";
 cin >> iA >> iB >> iC;

 iMin = iMax = iA;
 iMin = iMin > iB ? iB : iMin;
 iMin = iMin > iC ? iC : iMin;

 iMax = iMax < iB ? iB : iMax;
 iMax = iMax < iC ? iC : iMax;

 cout << "약수 : ";
 while(i <= iMin)
 {
  if(iMin % i == 0)
   cout << i << " ";

  i++;
 }

 i = 1;
 cout << endl << "최대공약수 : ";

 while(i <= iMax)
 {
  if(iA % i == 0 && iB % i == 0 && iC % i == 0)
   iGCM = iGCM < i ? i : iGCM;

  i++;
 }

 cout << iGCM << endl;

 return 0;
}

해설
  - 최대 공약수는 최대값까지 공통적으로 나머지가 0인 수의 최대값을 구하면 됩니다.
  - 공약수는 전부 나눠서 나머지가 0인 값을 출력하면 됩니다.

참고
  - 유사 문제

Posted by 카켈




1. 목적
  - 공약수의 원리 안다.
  - 반복문을 안다.

2. 문제 (점수 : 15 점)
  - 세수를 입력 받아서 모든 공약수들을 찾아내는 프로그램을 만든다.
  - 출력 화면

세개의 정수를 입력하세요 : 100 200 300
공약수 : 1      2       4       5       10      20      25      50      100

Press any key to continue

3. 이해
  - 공약수를 이해하고 C 에 적용할 수 있는가?

4. 코드

#include <stdio.h>

int main()
{
 int a,b,c,i,max;
 a = b = c = 0;
 i = 1;


 printf("세개의 정수를 입력하세요 : ");
 scanf("%d %d %d", &a, &b, &c);

 max = a;
 max = max < b ? b : max;
 max = max < c ? c : max;

 printf("공약수 : ");
 while(i <= max)
 {
  if(a % i == 0 && b % i == 0 && c % i == 0) printf("%d\t",i);
  i++;
 }

printf("\n");

 return 0;
}

5. 해설
  - 이전 문제들과 동일한 패턴으로 하시면 됩니다.
  - while 문으로 반복문을 최대한 짧게 표현했으며 삼항 연산자로 코드의 가독성을 높였습니다.

6. 참고
  - 동일 문제

Posted by 카켈



1. 목적
  - 공약수의 개념을 이해한다.

2. 문제 (점수 : 20점)
  - 정수값 세개를 입력 받고 이 수들의 공약수를 찾는 프로그램
  - 특정 제한 없음
  - 출력 화면
정수 값을 입력하세요 : 25 800 450
25, 800, 450 의 공약수 : 1 5 25
Press any key to continue

3. 이해
  - 공약수의 개념을 이해하는가?
  - 나머지의 개념을 이해하는가?

4. 코드

#include <stdio.h>

int main()
{
 int a,b,c,i,max;
 a = b = c = max = 0;
 i = 1;
 
 printf("정수 값을 입력하세요 : ");
 scanf("%d %d %d", &a, &b, &c);

 max = a;
 max = max < b ? b : max;
 max = max < c ? c : max;

 printf("%d, %d, %d 의 공약수 : ", a, b, c);
 while(i <= max)
 {
  if (a % i == 0 && b % i == 0 && c % i == 0) printf("%d ",i);
  i++;
 }

 putchar('\n');
 
 return 0;
}


5. 해설
  - 공약수는 해당 여러 숫자의 공통적으로 나머지가 0이 되는 약수를 의미합니다.
  - 우선 세수의 최대값을 찾고 최대값 까지 나머지가 0이 되는 숫자를 출력하면 됩니다.
  - 0으로 나누면 오류가 생기므로 시작값은 1부터 합니다.

6. 참고
  - http://www.winapi.co.kr/clec/cpp1/5-1-2.htm : 산술 연산자
Posted by 카켈
이전페이지 1 다음페이지