你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:核桃的数量
小张是软件项目经理,他带领三个开发组,工期紧,今天都在加班呢,为鼓舞士气,小张打算给每个组发一袋核桃,(据传言能补脑),他的要求是:
各组的核桃数量必须相同
各组内必须能平分核桃,(当然是不能打碎的)
尽量提供满足1、2条件的最小数量(节约闹革命嘛)
程序从标准输入读入:
a b c
a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)
程序输出:
一个正整数,表示每袋核桃的数量
例如:
用户输入:
2 4 5
程序输出:
20
再例如:
用户输入:
3 1 1
程序输入:
3
资源约定:
峰值内存消耗(含虚拟机)<64M
CPU消耗 < 1000ms
请严格按要求输入,不要画蛇添足的打印类似:“请您输入...”的多余内容
所有代码放在同一个源文件中,测试通过后,拷贝提交该源码
注意:main函数需要返回0
注意:只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数
注意:所有依赖的函数必须明确的在源文件中,#include<xxx> 不能通过工程设置而忽略常用头文件
提交时,注意选择所期望的编译器类型
解题思路:
本题根据题干中的要求,我们可以推断出,这其实是求三个数的最小公倍数的问题,所以我们可以按照求解最小公倍数的方法来对题目进行解答。
在这里我列出了两种求解的方法,一种是较为简单的直接求解三个数的最小公倍数的方法,第二种是利用两个数的最小公倍数的求解算法进行解答,
同时在这里总结一下两个数的最小公倍数的求解方法:
两个数的最小公倍数 = 两数乘积 / 两数的最大公约数
求两数的最大公约数可以使用辗转相除法求解:
在这里列出Java的求解方法:/**
* 求两个数的最小公倍数
* @param x y 传入的参数
* */
public static int minMultiple(int a,int b) {
return a*b/maxApp(a, b);
}
/**
* 求两个数的最大公约数
* @param x, y 传入的参数
* */
public static int maxApp(int a, int b) {
if (a<b) {
int temp = a;
a = b;
b = temp;
}
int r = a%b;
while (r!=0) {
a = b;
b = r;
r = a%b;
}
return b;
}
答案源码:
解法一(直接求解):
public class Year2013_t7 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); for (int i = 1; i <= a*b*c; i++) { if (i%a==0&&i%b==0&&i%c==0) { System.out.println(i); break; } } } }
解法二(求最小公倍数):
package 一三年省赛真题; import java.util.Scanner; public class Year2013_t7 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); System.out.println(minMultiple(a, minMultiple(b, c))); } /** * 求两个数的最小公倍数 * @param x y 传入的参数 * */ public static int minMultiple(int a,int b) { return a*b/maxApp(a, b); } /** * 求两个数的最大公约数 * @param x, y 传入的参数 * */ public static int maxApp(int a, int b) { if (a<b) { int temp = a; a = b; b = temp; } int r = a%b; while (r!=0) { a = b; b = r; r = a%b; } return b; } }
输出样例: