贪心解决最大最小公倍数问题
2016-03-04 22:03
369 查看
问题描述:给定一个整数n后,你需要任取三个不大于n的数,取法不限,每个数可取多个,使得取到的这三个数的最小公倍数在所有取法中是最大的。
说明:来源“蓝桥杯”题库;哈工大题库(http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1632)
参考:http://blog.csdn.net/u011669700/article/details/18702757
解题思路:
先确定n,然后确定n-1,最后就是找一个尽量大的和它们都互质的数,从n-2开始往小判断。
java代码:
import java.util.Scanner;
public class Main {
static boolean makesure(int a,int b){
int r=a%b;
while(r!=0){
a=b%r;
b=r;
r=a%b;
}
if(b==1)return true;
else return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
int n = read.nextInt();
int m=n-2;
boolean mark=true;
while(mark){
if(makesure(n,m)&&makesure(n-1,m))mark=false;
else m--;
}
System.out.print(n*(n-1)*m);
}
}
更正:当n是3倍数,且n>6时,m会取偏小。
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read=new Scanner(System.in);
long n=read.nextLong();
long ans;
if(n<=2){
ans=n;
}
else if(n%2==1){
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.print(ans);
}
}
说明:来源“蓝桥杯”题库;哈工大题库(http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1632)
参考:http://blog.csdn.net/u011669700/article/details/18702757
解题思路:
先确定n,然后确定n-1,最后就是找一个尽量大的和它们都互质的数,从n-2开始往小判断。
java代码:
import java.util.Scanner;
public class Main {
static boolean makesure(int a,int b){
int r=a%b;
while(r!=0){
a=b%r;
b=r;
r=a%b;
}
if(b==1)return true;
else return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
int n = read.nextInt();
int m=n-2;
boolean mark=true;
while(mark){
if(makesure(n,m)&&makesure(n-1,m))mark=false;
else m--;
}
System.out.print(n*(n-1)*m);
}
}
更正:当n是3倍数,且n>6时,m会取偏小。
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read=new Scanner(System.in);
long n=read.nextLong();
long ans;
if(n<=2){
ans=n;
}
else if(n%2==1){
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.print(ans);
}
}
相关文章推荐
- 《算法竞赛入门经典》3.3最长回文子串
- 欢迎使用CSDN-markdown编辑器
- ORCAD 创建原理图库
- 仅需6步,教你轻易撕掉app开发框架的神秘面纱(6):各种公共方法及工具类的封装
- 【GDKOI2016】项链Code&Details
- AndroidStudio快捷键
- 对于清浮动问题,终极。
- C语言中一些对文件操作的函数总结
- 如何安装CentOS6.5
- haproxy负载均衡代理服务详解
- 最小值最大值算法
- leetcode 335 : Self Crossing : 正反情况思考
- 作业要求 2016年3月4日
- android PopupWindow的简单实用
- 网站架构
- Codeforces 631C. Report
- 第一篇文章-用于忽悠妹子
- 如何评估你的创业点子
- 41-题目1074:对称平方数
- DB2锁表相关笔记