版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41275621/article/details/82875130
挑战任务
树袋熊是“绿盟”社区的一名绿色资源爱好者。他买了一个长方形彩纸,想要裁剪成尽可能大的相同大小的正方形彩纸送给女朋友,而且贯彻绿色精神,不能有剩余。请你编程序来帮他追到女朋友吧!
题目描述:
长方形彩纸长m
,宽n
,求出裁剪的相同大小的正方形的边长j
的最大值以及小正方形的个数k
。其中m,n,j,k
均为正整数。
输入:
第一行为长方形的长m
第二行为长方形的宽n
输出:
第一行输出正方形边长最大值j
第二行输出正方形个数k
补充完善右侧代码区中的main
函数,实现根据输入来判断正方形边长最大值和正方形个数的功能,具体要求如下:
- 不能有纸剩余;
- 所有的正方形大小必须相同;
- 确保前两个条件满足的情况下,使正方形的边长尽可能的大;
- 输出正方形的边长的最大值和正方形的个数。
输入:
4
2
输出:
2
2
样例2
输入:
7
3
输出:
1
21
开始挑战吧,祝你成功!
原理: 求出数的因数,相同且最大的就是正方形的边长
例: 72的因数有:1,2,3,4,6,8,9,12,18,24,36,72
63的因数有:1,3,7,9,21,63
取相同的且最大的,就是9.所以正方形最大边长为9
package step2;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Task {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int length = sc.nextInt(); //长
int width = sc.nextInt(); //宽
/********** BEGIN **********/
if(length % width == 0) {
int j = 0 ;
j = length / width;
System.out.println(j);
System.out.println( (length*width) / (j*j));
}else {
int chang = 1;
List len = count(length);
List wid = count(width);
out:for(int i = len.size()-1 ; i >= 0 ; i--) {
for(int j = 0 ; j < wid.size() ; j++) {
if(len.get(i) == wid.get(j)) {
chang = (int) len.get(i);
break out;
}
}
}
System.out.println(chang);
System.out.println( (length*width) / (chang*chang));
}
/********** END **********/
}
public static List<Integer> count(int n) {
List<Integer> num = new ArrayList<Integer>();
int k = 0;
for(int i = 1 ; i <= n ; i ++) {
if(n%i == 0) {
num.add(i);
}
}
return num;
}
}