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