3036번 문제입니다.
링이라고 쓰고 톱니바퀴라고 읽는것의 갯수가 n으로 주어지고, 해당 바퀴의 반지름이 다음줄에 입력으로 주어집니다.
출력은 첫째 바퀴가 1바퀴 돌동안 나머지 바퀴가 몇바퀴 도는지 기약분수의 형태로 출력하는건데요,,
이 문제가 최대공약수/최소공배수 카테고리에 들어가있습니다. 그걸 바탕으로 예제 출력값을 면밀히 관찰하시면 정답이 보입니다.
첫째 바퀴와 n번째 바퀴의 최대공약수로 첫째 바퀴를 나눈것이 분자, n번째 바퀴를 나눈것이 분모입니다.
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 | #include <cstdio> int gcd(int a, int b) { int c; while (b) { c = a % b; a = b; b = c; } return a; } int main() { int n; scanf("%d", &n); int* ringArr = new int[n]; for (int i = 0; i < n; i++) { scanf("%d", &ringArr[i]); } for (int i = 1; i < n; i++) { int gcdNum = gcd(ringArr[0], ringArr[i]); printf("%d/%d\n", ringArr[0] / gcdNum, ringArr[i] / gcdNum); } } | cs |