본문으로 바로가기

한양대 영재원 : 4월 단기연구과제

category 프로그래밍 2018. 5. 1. 16:13

 

  1. 문제의 정의

1 ]  1, 2, 3, 4, 5, 6으로 구성된 A/B = C/D + E/F 를 만족하는 A, B, C, D, E, F 값을 찾아라. 그리고 AB.CDEF 으로 출력해라

2]  1, 2, 3, 4, 5, 6, 7, 8으로 구성된 A/B = C/D + E/F + G/H를 만족하는 경우를 찾아라. 그리고 ABC.DEFGH로 출력해라


 

  2. 사용하는 알고리즘

 1] 123456~654321까지의 숫자 중 IsTrue라는 함수를 이용해 각 자리의 숫자를 뽑아낸다.

 이 과정에서 0, 7, 8, 9, 중복 등이 있는지 확인한다.


 그리고 A/B = C/D + E/F가 성립하는 경우에 출력한다.


2] 12345678~87654321에서 1] 과 같은 방법을 사용한다.


 

  3. 소스 코드

1 ]

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
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <math.h>
using namespace std;
 
int array[10= { };
 
int IsTrue (int a){
  int check[10= { };
  int j;
 
  for (j = 5; j >= 0; j--){
      array[j] = a % 10;
/= 10;
 
      if (check[array[j]] != || array[j] == || array[j] == || array[j] == || array[j] == 0)
             return 1;
 
      check[array[j]] = 1;
    }
  return 0;
}
 
int main ()
 
{
  int i;
  for (i = 123456; i <= 654322; i+=3) {
      int q = i;
      if (IsTrue (q) == 1)
             continue;
 
            float A=(float)array[0]/(float)array[1];
            float B=(float)array[2]/(float)array[3]+(float)array[4]/(float)array[5];
     
      if (floor(A*10000)==floor(B*10000))
               {
               int p; for (p = 0; p < 6; p++) {cout << array[p];if(p==1)cout<<".";} cout << endl;}
               }
 
 }
cs

2]


 

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
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <math.h>
using namespace std;
 
int array[10= { };
int IsTrue (int a){
 
  int check[10= { };
  int j;
 
  for (j = 7; j >= 0; j--){
 array[j] = a % 10;
 a /= 10;
 
if (check[array[j]] != || array[j] == || array[j] == 0)
 return 1;
 
check[array[j]] = 1;
 }
  return 0;
}
 
int main (){
  int i;
 
  for (i = 12345678; i <= 87654322; i+=9){
int q = i;
if (IsTrue (q) == 1)
   continue;
 
  float A=(float)array[0]/(float)array[1];
       float B=(float)array[2]/(float)array[3]+(float)array[4]/(float)array[5]+(float)array[6]/(float)array[7];
 
if (floor(A*10000)==floor(B*10000)){
 int p; for (p = 0; p < 8; p++){
      cout << array[p];
      if(p==2)cout<<".";}
      cout << endl;} 
}
}
}
cs

}