贪心算法之随机三个数的最小公倍数

问题描述

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

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        long n,ans;
        n=in.nextLong();
        if(n<3)
            ans=n;
        else{
            if(n%2!=0)
                ans=n*(n-1)*(n-2);
            else if(n%3!=0)
                ans=n*(n-1)*(n-3);
            else
                ans=(n-1)*(n-2)*(n-3);
        }
        System.out.println(ans);
    }
}

总结:

注解1.当n为奇数时,答案一定是n*(n-1)*(n-2)。

当n为偶数时,答案可能是(n-1)*(n-2)*(n-3),也可能是n*a*b,其中a>=n-3。

注解2.

贪心,从最大的三个数开始考虑,如果最大的数为奇数,那么相邻的三个数中有两个奇数,最大公约数为1,最小公倍数就为n*(n-1)*(n-2). 如果为偶数,那么往后移,考虑n*(n-1)*(n-3),这时n和n-3相差3,式子满足条件的前提是n不能被3整除,否则结果只能是(n-1)* (n-2)*(n-3).

时间: 2024-11-05 01:54:36

贪心算法之随机三个数的最小公倍数的相关文章

算法导论----贪心算法,删除k个数,使剩下的数字最小

先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4,要求的最小数字b是n-k=6位的: 1.先找最高位的数,因为是6位数字,所以最高位不可能在后5位上取到(因为数字的相对顺序是不能改变的,假设如果取了后五位中倒数第5位的7,则所求的b就不可能是6位的了,最多也就是4位的79228)理解这点很重要!所以问题变成从第1位到第k+1(n-(n-k-1))取

算法题:三个数相加等于某个特定值

题目来自于leetcode第十五题 给定一个n个整数的数组S,是否存在S中的元素a,b,c,使得a + b + c = 0? 查找数组中所有唯一的三元组,它们的总和为零. 注意:解决方案集不能包含重复的三元组. 例子: 给定数组:S = [-1, 0, 1, 2, -1, -4], 解决方案:[[-1, 0, 1],[-1, -1, 2]]. 在刚看到这道题目的题目的时候,首先想到的就是暴力解法,将数组排序后直接嵌套三个循环,这样子虽然简单,但是时间复杂度确实n^3,遇到数据量过大的时候消耗太大

[算法]不用第三个数交换2个数的位置

int a = 10; int b = 20; 第一种方法: a = a + b; b = a - b; a = a - b; 第二种方法: a = a ^ b; (^   语言中是异或的意思,同为0 异为1  1 ^ 1 = 0, 0 ^ 0 = 0, 1 ^ 0 = 1) b = a ^ b; a = a ^ b; 第三种方法  (这种方法容易越界)如果a 大于int型最大值了! a = (a + b) - (b = a);

Code+ A 晨跑【三个数的最小公倍数】

时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 题目描述 “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生王队长决定坚持晨跑.不过由于种种原因,每天都早起去跑步不太现实,所以王队长决定每a天晨跑一次.换句话说,假如王队长某天早起去跑了步,之后他会休息a-1天,然后第a天继续去晨跑,并以此类推. 王

Java--求三个数的最小公倍数

1 package com.algorithm.java.blueBirdge; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 import java.util.Arrays; 6 import java.util.Scanner; 7 8 public class leastCommonMultiple { 9 public static void main(String[] args){ 10 /* S

基于贪心算法求解TSP问题(JAVA)

前段时间在搞贪心算法,为了举例,故拿TSP来开刀,写了段求解算法代码以便有需之人,注意代码考虑可读性从最容易理解角度写,没有优化,有需要可以自行优化! 一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市.路径的选择目标是要求得的路径路程为所有路径之中的最小值. TSP问题

NYOJ 1057 寻找最大数(三)(关于贪心算法的认识)

以前做贪心题目都第一步对数据进行从大到小的排序,大部分贪心题目的的处理方法也是这样.但是NYOJ的1057题,在解题中 并不需要排序,一时间都没有意识到是贪心题.在看了讨论区之后意识到要用贪心的思想,才解出题目.认识到贪心算法并非是排序后再处理的机械操作,而是从局部寻求最优解的思想. 原题如下: 寻找最大数(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数. 求这个新的整数的最大值

c语言代码编程题汇总:将三个随机的三个数按从大到小输出

将三个随机的三个数按从大到小输出 程序代码如下: 1 /* 2 2017年3月12日17:55:24 3 功能:将三个随机的三个数按从大到小输出 4 */ 5 #include"stdio.h" 6 void fun(int ,int ,int ); 7 void fun1(int , int ); 8 int main() 9 { 10 int a,b,c; 11 printf("please input three number :"); 12 scanf(&q

【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】

[015-3 Sum(三个数的和)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) m