栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

题解 蓝桥杯 算法提高 ADV-940 因式分解 Java(分治)

题解 蓝桥杯 算法提高 ADV-940 因式分解 Java(分治)

题目

将大于1的自然数N进行因式分解,满足:
  N=а1а2а3…аm且1<а1≤а2≤…≤аm<N
  编一程序,输入N(1<N<10^9)

输入要求

N由键盘输入

输出要求

① 第1行至第M行输出所有的M种方案(顺序不限)
② 第M+1行输出方案总数T。

样例输入

N=12

样例输出 分析

这题的数据规模还是比较大的,刚开始我尝试的是使用字符串拼接然后回溯来做,结果超时了,大数据我们要逐一分析.
注意N=а1а2а3…аm且1<а1≤а2≤…≤аm<N这条件,a2是大于等于a1的说明要加判断 避免 6=3x2 这种情况
根据题目给的输出:12=2x6,可以看成12=a1xa2,这个a2很显然可以继续再划分的(12=2x2x3)
那么这题就变成了求出当前数的因式分解,这个乘积为a1xa2 (a1<=a2);

代码
import java.util.Scanner;

public class Main {
	static int T=0;
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		StringBuffer sb=new StringBuffer(sc.next());
		//它的输入N是一个字符串,需要转换一下
		int n=Integer.valueOf(sb.substring(2,sb.length()).toString()) ;
		f(n,n+"=",2);
		//注意他的T输出有个空格的
		System.out.println("T"+" "+"="+T);
	}
	static void f(int n,String s,int dex) {
		if(n==1) {
			return;
		}
		String s2=s;
		for(int i=dex;i<=n;i++) {
			if(n%i==0) {
				int m=n/i;
				//a1<=a2<=a3
				if(m 
总结 

对于初学的我来说做得还是有些吃力的,第一次使用字符串拼接加回溯超时,就想去找老师要答案看看别人怎么写的,还好老师阻止,并给予了我鼓励,最后虽然花了很长时间,但也自己独立思考想了出来,收获还是很大的,码算法题遇到困难还是先自己独立思考来做比较好.收获满满

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号