의자 배치 방법에 대한 흥미로운 선호도를 가진 학생들에게 수업을 진행합니다. 의자 배치 방법에 대한 3 가지 요구 사항이 있습니다.
의자가 비어 있다는 것을 의미하더라도 대부분 직사각형으로 배열됩니다.
빈 의자는 가능한 한 적어야합니다.
가능한 "평방형"이어야합니다. 직각도는 사각형의 너비와 높이 사이의 거리에 따라 결정되며 낮을수록 좋습니다. 예를 들어,
4x7제곱이 3 인 직사각형은
보다 구체적으로, 배치의 "점수"는 폭과 높이 사이의 거리 + 비게 될 의자 수를 더한 값입니다.
예를 들어 봅시다. 13 명의 학생이 있다고 가정 해 봅시다. 다음과 같은 방법으로 의자를 배치 할 수 있습니다.
1x13
2x7
3x5
4x4
1x13매우 제곱이 아닙니다. 실제로 1과 13은 12로 떨어져 있으므로이 배열에 12 포인트를 부여합니다. 또한 비어있는 의자가 0 개이므로 0 점을 더하여이 배열의 점수는 12 점입니다.
2x7확실히 더 좋습니다. 2와 7은 5 만 떨어져 있으므로이 배열에 5 포인트를줍니다. 그러나 실제로 7 개의 의자를 2 열로 배열하면 의자가 14 개가되어 의자 하나가 비어있게됩니다. 그래서 우리는 한 점을 더해서이 배열에 6 점을줍니다.
우리는 또한 할 수있었습니다 3x5. 3과 5는 2 개 떨어져 있으므로 +2 점입니다. 15 개의 의자가 필요합니다. 즉, 2 개의 추가 의자가 있으므로 다른 점수는 2 점으로 4 점을 얻습니다.
마지막 옵션 4x4. 4와 4는 0으로 떨어져 있으므로 +0 점을줍니다. 4x4는 16 개의 의자를 사용하므로 3 개의 의자가 비워져 총 3 점을 얻습니다. 이것이 최적의 솔루션입니다.
넥타이의 경우 빈 의자가 적은 솔루션이 최적의 솔루션입니다.
도전
정수를 취하고 해당 수의 학생을위한 최적의 의자 배열을 출력하는 프로그램 또는 함수를 작성해야합니다. IO는 합리적인 형식 일 수 있습니다. 다음은 1에서 100 사이의 학생 수에 대한 샘플 출력입니다.
1: (1, 1)
2: (1, 2)
3: (2, 2)
4: (2, 2)
5: (2, 3)
6: (2, 3)
7: (3, 3)
8: (3, 3)
9: (3, 3)
10: (2, 5)
11: (3, 4)
12: (3, 4)
13: (4, 4)
14: (4, 4)
15: (4, 4)
16: (4, 4)
17: (3, 6)
18: (3, 6)
19: (4, 5)
20: (4, 5)
21: (3, 7)
22: (5, 5)
23: (5, 5)
24: (5, 5)
25: (5, 5)
26: (4, 7)
27: (4, 7)
28: (4, 7)
29: (5, 6)
30: (5, 6)
31: (4, 8)
32: (4, 8)
33: (6, 6)
34: (6, 6)
35: (6, 6)
36: (6, 6)
37: (5, 8)
38: (5, 8)
39: (5, 8)
40: (5, 8)
41: (6, 7)
42: (6, 7)
43: (5, 9)
44: (5, 9)
45: (5, 9)
46: (7, 7)
47: (7, 7)
48: (7, 7)
49: (7, 7)
50: (5, 10)
51: (6, 9)
52: (6, 9)
53: (6, 9)
54: (6, 9)
55: (7, 8)
56: (7, 8)
57: (6, 10)
58: (6, 10)
59: (6, 10)
60: (6, 10)
61: (8, 8)
62: (8, 8)
63: (8, 8)
64: (8, 8)
65: (6, 11)
66: (6, 11)
67: (7, 10)
68: (7, 10)
69: (7, 10)
70: (7, 10)
71: (8, 9)
72: (8, 9)
73: (7, 11)
74: (7, 11)
75: (7, 11)
76: (7, 11)
77: (7, 11)
78: (9, 9)
79: (9, 9)
80: (9, 9)
81: (9, 9)
82: (7, 12)
83: (7, 12)
84: (7, 12)
85: (8, 11)
86: (8, 11)
87: (8, 11)
88: (8, 11)
89: (9, 10)
90: (9, 10)
91: (7, 13)
92: (8, 12)
93: (8, 12)
94: (8, 12)
95: (8, 12)
96: (8, 12)
97: (10, 10)
98: (10, 10)
99: (10, 10)
100: (10, 10)
평소와 같이 이것은 코드 골프이므로 표준 허점이 적용되며 승자가 바이트 단위로 가장 짧은 답입니다.