zoukankan      html  css  js  c++  java
  • 28-算法训练 最大最小公倍数 -贪心

                    算法训练 最大最小公倍数  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述

    已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

    输入格式

    输入一个正整数N。

    输出格式
    输出一个整数,表示你找到的最小公倍数。
    样例输入
    9
    样例输出
    504
    数据规模与约定

    1 <= N <= 106。

    注意:

    1.数据大,int 会超过范围;

    2.推导过程:

    n 为奇数时, 毫无疑问 n * (n - 1) * (n - 3) 最大,且是最小公倍数,应为两两之间没有公约数,因为相邻的n, n -1 只差为1,肯定不能,而 n, n - 2 之间差 2 但都是奇数,有都不能被2整除,故,三者之积为最小公倍数;

    n 为偶数时:

    n * (n - 1) * (n - 3)  这样应该是最大的,但是无法保证 n, n - 3 之间不能被3整除,如,9,10, 11, 12, 故此时就得用下面的式子最大了;

    (n - 1) * (n - 2) * (n - 3), 这样(n-1)为奇数,如第一种情况了,所以一定三者没有大于1的公约数。

    另外: 当 n = 1, n = 2时公式不适用了!!!要特判。

    import java.util.Scanner;
    
    public class Main{
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		long n;
    		n = cin.nextLong();
    		if(n == 1) {
    			System.out.println(1);
    		}
    		else if(n == 2) {
    			System.out.println(2);
    		}
    		else {
    			if(n % 2 == 0) {
    //				System.out.println(Math.max(n * (n - 1) * (n - 3), (n - 1) * (n - 2) * (n - 3)) );
    				//n 和 n - 3 之间可以会被3整除,如9,10,11,12
    				if(n % 3 == 0) {
    					System.out.println((n - 1) * (n - 2) * (n - 3));
    				}
    				else {
    					System.out.println(n * (n - 1) * (n - 3));
    				}
    			}
    			else {
    				System.out.println(n * (n - 1) * (n - 2));
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    stm32型号与flash大小
    SVN适用教程
    sylixos初接触
    基于stm32实时操纵系统初接触
    freertos任务调度
    flash结构
    nand nor flash
    反汇编文件分析
    mm.与cache
    CISC(复杂指令集)和RISC(简单指令集),x86、ARM、MIPS架构
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/10424709.html
Copyright © 2011-2022 走看看