第14届蓝桥杯大赛——真题训练第五天

第一题:质因数个数

问题描述 给定正整数 n, 请问有多少个质数是 n 的约数。
输入格式 输入的第一行包含一个整数 n 。 输出格式 输出一个整数, 表示 n 的质数约数个数。 样例输入 396 样例输出 3 样例说明 396 有 2,3,112,3,11 三个质数约数。
题目分析 //不需要遍历到n,任何一个数,它的质因子大于根号n的要么没有,要么只有一个 //对于正整数 N 来说,它的任意一个因数 T 都是它质因数的乘积 //但是要注意一个问题,比如说 求6得质因子个数,当i*i<=6时结束循环,此时i一定是小于3的,按照我们的分析 6应该包含2个质因子(2和3), //所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数
题目代码 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextLong(); int ans = 0; //不需要遍历到n,任何一个数,它的质因子大于根号n的要么没有,要么只有一个 //对于正整数 N 来说,它的任意一个因数 T 都是它质因数的乘积 //但是要注意一个问题,比如说 求6得质因子个数,当i*i<=6时结束循环,此时i一定是小于3的,按照我们的分析 6应该包含2个质因子(2和3), //所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数 for (int i = 2; i < Math.sqrt(n); i++) { if(n%i == 0) { ans++; } while(n%i==0) { n = n/i; } } if (n > 1) ans++; System.out.println(ans); } }

第二题:三羊献瑞

题目描述 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞 ------------------- 三 羊 生 瑞 气 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
题目分析 暴力fori 要注意循环条件
题目代码 public class 三羊辉瑞 { public static void main(String[] args) { int a,b,c,d,e,f,x; int sum1,sum2,sum; boolean flag=false; for(a=0; a<10; a++) { for(b=0; b<10; b++) { for(c=0; c<10; c++) { for(d=0; d<10; d++) { for(e=0; e<10; e++) { for(f=0; f<10; f++) { for(x=0; x<10; x++) { if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=x&&b!=c&&b!=d&&b!=e&&b!=f&&b!=x&&c!=d&&c!=e&&c!=f&&c!=x&&d!=e&&d!=f&&d!=x&&e!=f&&e!=x&&f!=x) { if(a!=1&&b!=1&&c!=1&&d!=1&&e!=1&&f!=1&&x!=1) { sum1=a*1000+b*100+c*10+d; sum2=1000+e*100+f*10+b; sum=10000+e*1000+c*100+b*10+x; if((sum1+sum2)==sum) { System.out.println(sum2); flag=true; break; } } } } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } } }

第三题: 加法变乘法

题目描述 我们都知道:1+2+3+ … + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015 就是符合要求的答案。 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。 注意:需要你提交的是一个整数,不要填写任何多余的内容。
题目思路 我们可以假设靠前乘号的左边数字为a, 则右边的数字为a+1,靠后乘号的左边的数字为b,则乘号右边的数字为b+1。 所以算式可改写为: 1+2+3+...+a+(a+1)+(a+2)+...+b+(b+1)+...+49=1225 (1) 1+2+3+...+a*(a+1)+(a+2)+...+b*(b+1)+...+49=2015 (2) (2)-(1)=a*(a+1)+b*(b+1)-a-(a+1)-b-(b+1)=2015-1225=790
题目代码 public class 加法变乘法 { public static void main(String[] args) { int a,b,c,d; for(int i=1;i<=49;i++) { a=i; b=i+1; for(int j=i+2;j<=49;j++) { c=j; d=j+1; if(a*b+c*d-(a+b)-(c+d)==790&&a!=10) { System.out.println(a); break; } } } } }
经验分享 程序员 微信小程序 职场和发展