蓝桥杯:算法训练之最大最小公倍数

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

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

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

1 <= N <= 106。

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

代码如下:

package com.sihai.advance;

import java.util.Scanner;public class Tanxin {    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);        long n = scanner.nextLong(); 
        long result;        if(n<3)  
            result=n;  
        else{  
        if(n%2!=0)  
            result=n*(n-1)*(n-2);  
        else if(n%3!=0)  
            result=n*(n-1)*(n-3);  
        else  
            result=(n-1)*(n-2)*(n-3);  
        }  
        System.out.println(result);
    }
}1234567891011121314151617181920212223242512345678910111213141516171819202122232425

关于贪心算法可以看一下下面的内容

一、基本概念:

 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。

二、贪心算法的基本思路:
   1.建立数学模型来描述问题。
   2.把求解的问题分成若干个子问题。
   3.对每一子问题求解,得到子问题的局部最优解。
   4.把子问题的解局部最优解合成原来解问题的一个解。

三、贪心算法适用的问题
     贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
   实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。

四、贪心算法的实现框架
   从问题的某一初始解出发;
   while (能朝给定总目标前进一步)
   {  
         利用可行的决策,求出可行解的一个解元素;
   }
   由所有解元素组合成问题的一个可行解;

五、贪心策略的选择
    因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。

六、例题分析
   下面是一个可以试用贪心算法解的题目,贪心解的确不错,可惜不是最优解。
   [背包问题]有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。
   要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
   物品 A B C D E F G
   重量 35 30 60 50 40 10 25
   价值 10 40 30 50 35 40 30
   分析:
   目标函数: ∑pi最大
   约束条件是装入的物品总重量不超过背包容量:∑wi<=M( M=150)
   (1)根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?
   (2)每次挑选所占重量最小的物品装入是否能得到最优解?
   (3)每次选取单位重量价值最大的物品,成为解本题的策略。
   值得注意的是,贪心算法并不是完全不可以使用,贪心策略一旦经过证明成立后,它就是一种高效的算法。
   贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。
   可惜的是,它需要证明后才能真正运用到题目的算法中。
   一般来说,贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。
   对于例题中的3种贪心策略,都是无法成立(无法被证明)的,解释如下:
   (1)贪心策略:选取价值最大者。反例:
   W=30
   物品:A B C
   重量:28 12 12
   价值:30 20 20
   根据策略,首先选取物品A,接下来就无法再选取了,可是,选取B、C则更好。
   (2)贪心策略:选取重量最小。它的反例与第一种策略的反例差不多。
   (3)贪心策略:选取单位重量价值最大的物品。反例:
   W=30
   物品:A B C
   重量:28 20 10
   价值:28 20 10
   根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择A,则答案错误。

时间: 2024-10-12 03:56:05

蓝桥杯:算法训练之最大最小公倍数的相关文章

蓝桥杯.算法训练:最大最小公倍数

import java.util.Scanner; public class Main { public void printResult(long n) { long result = 0; if(n <= 2) //此时最多只能选择两个数,不符合题意 return; if(n % 2 == 1) { result = n * (n - 1) * (n - 2); //奇数返回n,n-1,n-2 } else { if(n % 3 == 0) //说明n和n - 3有最大公约数3 result

蓝桥杯——算法训练之乘积最大

问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大. 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3

蓝桥杯 算法训练 ALGO-125 王、后传说

算法训练 王.后传说 时间限制:1.0s   内存限制:256.0MB 问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办法. 所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死...... 现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王在王宫的边上,占用的格子可能不到9个).当然,皇后也不会攻击国王.

蓝桥杯 算法训练 ALGO-139 s01串

算法训练 s01串 时间限制:1.0s 内存限制:256.0MB 问题描述  s01串初始为"0"  按以下方式变换  0变1,1变01 输入格式  1个整数(0~19) 输出格式  n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定  0~19 示例代码: 1 import java.util.Scanner; 2 3 public class Main { 4 static StringBuffer sb = new StringBuffer(); 5 public

蓝桥杯 算法训练 2的次幂表示

算法训练 2的次幂表示 时间限制:1.0s   内存限制:512.0MB 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0  所以最后137可表示为:2(2(2)+2+2(0))+

蓝桥杯 算法训练 最短路

算法训练 最短路 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边. 输出格式 共n-1行,第i行表示1号点到i+1号点的最短路. 样例输入 3 31 2 -12 3 -13 1 2 样例输出 -1-2 数据规模与约定 对于10%的数据,n = 2,

蓝桥杯 算法训练 ALGO-57 删除多余括号

算法训练 删除多余括号 时间限制:1.0s   内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简.另外不考虑'+' '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形. 输入格式 表达式字符串,长度不超过255, 并且不含空格字符.表达式中的所有变量都是单个小写的英文字母, 运算符只有加+减-乘*除/等运算符号. 输出格式 去掉多余括号后的表达式

蓝桥杯 算法训练 ALGO-117 友好数

算法训练 友好数 时间限制:1.0s   内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1+3=4 4的约数和有:1+2=3 所以9和4不是友好的. 220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284 284的约数和有:1 2 4 71 142=220 所以220和284是友好的. 编写程序,判断两个数是否是友好数. 输入格式 一行,两个整数,由空格分隔 输出格式 如

蓝桥杯 算法训练 ALGO-121 猴子分苹果

算法训练 猴子分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分.这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果.第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起.这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果.第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个.问,原来这些猴子至少采了多少个苹果. 输入格式 两个整数