蓝桥与力扣刷题(蓝桥 核桃的数量)
题目:小张是软件项目经理,他带领 3 个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
-
各组的核桃数量必须相同
-
各组内必须能平分核桃(当然是不能打碎的)
-
尽量提供满足 1,2 条件的最小数量(节约闹革命嘛)
输入描述
输入一行 a,b,ca,b,c,都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)(a,b,c<30)。
输出描述
输出一个正整数,表示每袋核桃的数量。
输入输出样例
示例
输入
2 4 5
输出
20
解题思路+代码:
代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
/**
思路:
1.读取3个组加班的人数
2.创建核桃分发方法(核桃数 % 组人数 == 0)
*/
Scanner scan = new Scanner(System.in);
int[] person = new int[3];
for(int i = 0;i< person.length;i++){
person[i] = scan.nextInt();//读取3个组加班的人数存放进数组
}
//更新结果
int result = Integer.MAX_VALUE;
for(int i = 1;i <= 10000; i++){
boolean flag = true;
//判断核桃是否能够正好分发给小组成员
for(int j = 0; j < person.length;j++){
if(i % person[j] != 0){
flag = false;
break;
}
}
//当flag为true时,将i(最小公约数)赋值给result
if(flag){
result = i;
break;
}
}
System.out.println(result);
scan.close();
}
}
总结:解答这道题需要求核桃的数量,很容易想到模运算,用核桃的数量分别%三组人数==0即可,但是这样的数存在很多个,但题目要求的尽量提供满足 1,2 条件的最小数量(节约闹革命嘛)正暗示了需要求最小公约数,因此求解最小公约数即是正确求解。那怎么在代码中体现最小公约数?我个人的解法是使用数组来存储三组人数,用for循环+if条件判断找到最小的遍历值,再赋值给结果并输出。这里也可以不用数组换成暴力匹配,直接获取三组人数,用for循环+if条件判断(3个组分别判断)后得到最小遍历值也是相应的结果。