第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);
    }
}

第二题:三羊献瑞

题目描述 

观察下面的加法算式:

       祥 瑞 生 辉
  +   三 羊 献 瑞
  -------------------
  三 羊 生 瑞 气
第14届蓝桥杯大赛——真题训练第五天_第1张图片

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的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

所以原问题变成了在 1-49之间找两对相邻的数字,且它们的乘积之和减去四个数字之和的差为790

原文链接:https://blog.csdn.net/just16cz/article/details/84198038

题目代码

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;
			}
		}
	}
}
}

你可能感兴趣的:(蓝桥杯,蓝桥杯,算法,职场和发展,java,学习)