暑期集训之cake
2017-07-21 20:58
162 查看
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.
Input每行有两个数p和q.
Output输出最少要将蛋糕切成多少块.
Sample Input
Sample Output
Hint
因为不会做,所以看了下别人的思路才写开的,下面就是本体的思路了:
如果要能把它分为等值的p份或q份,那么我们可以先分为d(最大公约数)=gcd(p,q)份, 因为当你分为d份的时候,你可能选择将每份分为p/d份(也就是把整体分为p份), 也可以选择将每份分为q/d份(也就是把整体分为p份), 这两种选择里,肯定会有切到相同位置的一刀! 所以我们可以得到公式:s=p+q-gcd(p,q);
具体代码如下:
#include<stdio.h>
int gcd(int a,int b)
{
if(a<b)
{
int t=a;
a=b;
b=t;
}
while(b)
{
int r=b;
b=a%b;
a=r;
}
return a;
}
main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
printf("%d\n",m+n-gcd(m,n));}
return 0;
}
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份,那么我们可以先分为d(最大公约数)=gcd(p,q)份, 因为当你分为d份的时候,你可能选择将每份分为p/d份(也就是把整体分为p份), 也可以选择将每份分为q/d份(也就是把整体分为p份), 这两种选择里,肯定会有切到相同位置的一刀! 所以我们可以得到公式:s=p+q-gcd(p,q);
具体代码如下:
#include<stdio.h>
int gcd(int a,int b)
{
if(a<b)
{
int t=a;
a=b;
b=t;
}
while(b)
{
int r=b;
b=a%b;
a=r;
}
return a;
}
main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
printf("%d\n",m+n-gcd(m,n));}
return 0;
}
相关文章推荐
- NBUT-2014暑期集训专题练习1 -> 二分法 N - N
- 第二第三周暑期集训总结
- 2132: 中南大学2017年ACM暑期集训前期训练题集(入门题)
- CSU--------2133: 中南大学2017年ACM暑期集训前期训练题集(基础题)
- 2017暑期集训 Day 3 搜索与并查集
- 暑期集训之素数判断方法
- 暑期集训之What Is Your Grade?
- 暑期集训总结
- HDOJ2009暑期集训内部赛(5)
- 2013.7.19 2013NBUT暑期集训成果赛
- 【随笔】2014暑期集训总结
- 总结_2010暑期集训选拔赛感想
- 暑期集训-dp(1)
- 2016暑期集训---周赛(水题)
- 2016暑期集训1C 最长回文
- 2017暑期集训 Day 3
- 暑期集训day3训练(数据结构)
- 暑期集训之最小公倍数
- 暑期集训第一天
- 暑期集训之Bear and Three Balls