全国绿色计算大赛 模拟赛第二阶段(Java)第2关:折纸小游戏

挑战任务

树袋熊是“绿盟”社区的一名绿色资源爱好者。他买了一个长方形彩纸,想要裁剪成尽可能大的相同大小的正方形彩纸送给女朋友,而且贯彻绿色精神,不能有剩余。请你编程序来帮他追到女朋友吧!

题目描述:

长方形彩纸长m,宽n,求出裁剪的相同大小的正方形的边长j的最大值以及小正方形的个数k。其中m,n,j,k均为正整数。

输入:

第一行为长方形的长m
第二行为长方形的宽n

输出:

第一行输出正方形边长最大值j
第二行输出正方形个数k

编程要求

补充完善右侧代码区中的main函数,实现根据输入来判断正方形边长最大值和正方形个数的功能,具体要求如下:

  • 不能有纸剩余;
  • 所有的正方形大小必须相同;
  • 确保前两个条件满足的情况下,使正方形的边长尽可能的大;
  • 输出正方形的边长的最大值和正方形的个数。

测试说明

样例1

输入:

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 count(int n) {
		List num = new ArrayList();
		int k = 0;
		for(int i = 1 ; i <= n ; i ++) {
			if(n%i == 0) {
				num.add(i);
			}
		}
		return num;
		
	}
}

 

你可能感兴趣的:(全国绿色计算大赛,模拟赛)