您的位置:首页 > 其它

ACM--平均分蛋糕--HDOJ 1722--Cake

2016-05-23 20:13 260 查看
HDOJ题目地址:传送门


Cake

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3263    Accepted Submission(s): 1703

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块。

举个例子:4 6,用一个矩形来切割,其实应该是圆的。这里边界也得加上,因为首位其实是相连的。。。自己动手画下圆形的蛋糕模拟。

                                          

                  

                      

红色点线表示4等分线 蓝色实线表示6等分线,让蛋糕(矩形)可以平分为4份需要(4刀)和6份需要(6刀),总共需要10刀,但因为其中有两条线是重合的,没有必要切两次,所以应该减掉这两刀,就只剩下10-2=8刀了。对于任何p和q,他们重合的线的数量就是他们的公约数。

所以公式就是:p+q-gcd(p,q)

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
/**
用来求最大公约数
*/
int gcd(int n,int m){
int i=0;
while(m!=0){
i=n%m;
n=m;
m=i;
}
return n;
}
int main(){
int i,j,result;
while(scanf("%d%d",&i,&j)!=EOF){
result=i+j-gcd(i,j);
printf("%d\n",result);
}
}


参考博客:http://blog.csdn.net/niushuai666/article/details/7011139
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: