fork download
  1. /*
  2. 평균 점수가 N개 주어질 때 최소 응답 인원 수 K를 구하기
  3. 응답 값은 0~10사이 정수
  4. 2
  5. 0.500
  6. 0.300
  7. 2
  8. 0.500
  9. 0.301
  10. 평균 점수에 인원수를 곱하면 항상 정수가 됨
  11. 소수셋째 자리에서 잘라냈다고 했으므로 평균점수/K, 평균점수+0.0009/K 사이에 정수가 있는지 구하기
  12. 구한 K들의 최소공배수 찾기
  13. 18 24 45의 최소공배수
  14.  
  15.  */
  16. #include <iostream>
  17. using namespace std;
  18.  
  19. int gcd(int a, int b) {
  20. if (a < b) {
  21. int t = a;
  22. a = b;
  23. b = t;
  24. }
  25. if (b == 0) {
  26. return a;
  27. }
  28. return gcd(b, a % b);
  29. }
  30.  
  31. int lcm(int a, int b) {
  32. return a * b / gcd(a, b);
  33. }
  34.  
  35. int main() {
  36. int N;
  37. double arr[50];
  38. int K[50] = {0};
  39. cin >> N;
  40. for (int i = 0; i < N; i++) {
  41. cin >> arr[i];
  42. for (int j = 1; j <= 1000; j++) {
  43. double S1 = arr[i] * j, S2 = (arr[i] + 0.0009) * j;
  44. if ((int) S1 == S1 || (int) S1 < (int) S2) {
  45. K[i] = j;
  46. break;
  47. }
  48. }
  49. }
  50. // lcm of list
  51. if (N == 1) {
  52. cout << K[0];
  53. return 0;
  54. }
  55. int res = lcm(K[0], K[1]);
  56. for (int i = 2; i < N; i++) {
  57. res = lcm(res, K[i]);
  58. }
  59. cout << res;
  60. }
  61.  
Success #stdin #stdout 0s 5320KB
stdin
3
0.5
0.25
0.125
stdout
8