欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-04-20
题目

将大于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<=a3if(m

总结

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。