Cake
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1878 Accepted Submission(s): 943
Problem Description
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.
Input
每行有两个数p和q.
Output
输出最少要将蛋糕切成多少块.
Sample Input
2 3
Sample Output
4
Hint将蛋糕切成大小分别为1/3,1/3,1/6,1/6的四块即满足要求.
当2个人来时,每人可以吃1/3+1/6=1/2 , 1/2块。
当3个人来时,每人可以吃1/6+1/6=1/3 , 1/3, 1/3块。
思路:
题目挺简单的,假设p>=q我们想像下,首先我们拿来一个蛋糕,然后把它平均切成p块,接下来的任务就是在把已经切了的蛋糕在切成q块,假设之前没有切过蛋糕肯定是切成q块,但蛋糕上已经有了一些切过的痕迹,我们要得到尽量少的块数就得尽量的的利用这些切过的位置少切几刀,我们最多能用的就是p,q的最大公约数那么多,所以 ans = p + q - Gcd(p ,q),挺简单的,要是不明白画画图就知道了...
#include<stdio.h> int Gcd(int a ,int b) { return b == 0 ? a : Gcd(b ,a % b); } int main () { int p ,q; while(~scanf("%d %d" ,&p ,&q)) { printf("%d " ,p + q - Gcd(p ,q)); } return 0; }