思路:
要想到正n边形中所有可能的ang为180 * k / n (1 <= k <= n - 2)。
根据n = 180 * k / ang, n是大于等于3的整数,并且n >= k + 2,计算满足条件的最小的n即可。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int my_ceil(int x, int y) 4 { 5 return (x + y - 1) / y; 6 } 7 int main() 8 { 9 int T, a; 10 cin >> T; 11 while (T--) 12 { 13 cin >> a; 14 int lb = my_ceil(2 * a, 180 - a); 15 lb = max(lb, my_ceil(a, 60)); 16 int g = __gcd(180, a); 17 int ans = 180 / g; 18 a /= g; 19 if (lb > a) ans *= my_ceil(lb, a); 20 cout << ans << endl; 21 } 22 return 0; 23 }