第五届蓝桥杯省赛

一、正则表达式的运算(考试的时候可以查apk)
这里写图片描述


java中提供了对正则表达式的支持。
有的时候,恰当地使用正则,可以让我们的工作事半功倍!

如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。

注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号。


public class A
{
    public static int f(String s)
    {
        return s.split("________________").length;
    }
    public static void main(String[] args)
    {
        System.out.println(f("12+35*5-2*18/9-3")); //7
        System.out.println(f("354*12+3-14/7*6")); //6
    }
}

所以答案为:
这里写图片描述

package s_1;

public class Main
/*
 * java中提供了对正则表达式的支持。
 * 有的时候,恰当地使用正则,可以让我们的工作事半功倍!
 * 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。
 * 注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号。
 */
{
    public static int f(String s)
    {
//      return s.split("\\+|\\-|\\*|\\/").length;
//      String类的函数返回的是一个字符串数组,只需要统计他的长度即可,即可求出四则运算中的数据项的数目。
        return s.split("[^0-9]").length;
    }

    public static void main(String[] args)
    {
        System.out.println(f("12+35*5-2*18/9-3")); //7
        System.out.println(f("354*12+3-14/7*6")); //6
    }
}

二、采用暴力法进行求解,一个很大的数进行枚举即可出结果。

1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。

它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。

但是,它发散的很慢:

前1项和达到 1.04项和才超过 2.083项的和才超过 5.0

那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?

请填写这个整数。

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。

通过该程序可知,int类型的整数的最大值为:2147483647
这里写图片描述

代码如下:

package s_2;
public class Main {
    /*
     * 答案为1835421.
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double sum=0;
        for(int i=1;i<=100000000;i++){
            sum+=1.0/i;
            if(sum>=15.0){
                System.out.print(i);
                break;
            }
`
    }

    }
}

三、
这里写图片描述

如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?

显然,这个值是介于2和3之间的一个数字。

请把x的值计算到小数后6位(四舍五入),并填写这个小数值。

注意:只填写一个小数,不要写任何多余的符号或说明。
package s_3;

public class Main {
    /**
     * 答案为:2.506184
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(double x=2.5;;x+=0.00000001){
            //System.out.println(x);
            if((10-Math.pow(x,x))<0.0000001){
                System.out.print(String.format("%.6f",x));
                break;
            }
        }

    }

}

四、

今有7对数字:两个1,两个2,两个3...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:

17126425374635

当然,如果把它倒过来,也是符合要求的。

请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。

注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。

在使用普通的全排列方法后发现一直超时,后来发现使用数学方法反而更加简便!!!
这里写图片描述

五、对于统计个数的题,一定要输出,看看有没有重复的。

  勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形。

  已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。

  求满足这个条件的不同直角三角形的个数。

【数据格式】
输入一个整数 n (0<n<10000000) 表示直角三角形斜边的长度。
要求输出一个整数,表示满足条件的直角三角形个数。

例如,输入:
5
程序应该输出:
1

再例如,输入:
100
程序应该输出:
2

再例如,输入:
3
程序应该输出:
0


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

代码如下:

package s_5;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner cin=new Scanner(System.in);
        int n=cin.nextInt();
        int sum=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i*i+j*j==n*n){
                    System.out.println(i+":"+j);
                    sum++;
                }
            }   
        }
        System.out.print(sum/2);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36717487/article/details/79766891