解题思路:
这题就是变向地求最小公倍数
因为这样才能 各组平分核桃
那这个问题就变成了如何求最小公倍数了,那我们应该使用辗转相除法来求
最大公因数和最小公倍数的相关性质:两数的乘积除以最大公因数就是最小公倍数
辗转相除法是古希腊求两个正整数的最大公约数的,也叫欧几里德算法,其方法是用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数,继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数。
如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
参考代码:
#include <stdio.h> int gcd(int a, int b)//求最大公约数 { return b == 0 ? a : gcd(b, a % b); } int lcm(int a, int b)//求最小公倍数 { return a * b / gcd(a, b); } int main() { //这题的题目有一点求最小公倍数的味道 int a, b, c; scanf("%d%d%d", &a, &b, & c); //先求出a和b的最小公倍数,然后再用a和b的最小公倍数和c求出他们三个之间的最小公倍数 printf("%d\n",lcm(lcm(a,b),c)); return 0; }
0.0分
18 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:621 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:499 |
用筛法求之N内的素数。 (C语言代码)浏览:798 |
【计算球体积】 (C语言代码)浏览:1087 |
模拟计算器 (C++代码)浏览:787 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2148 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:579 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1473 |
字符串的输入输出处理 (C语言代码)浏览:984 |
钟神赛车 (C语言代码)浏览:581 |