1、则表达式

 

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


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

 

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

 

 

 

代码:

package 校内选拔2015;

public class T1
{
public static int f(String s)
{
return s.split("\\p{Punct}").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
}
}

 

 

2、达到或超过 15.0 

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

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

但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

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

请填写这个整数。

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

 

 

代码:

package 校内选拔2015;

import java.math.BigDecimal;;

public class T2 {

public static void main(String[] args) {

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

BigDecimal bd=BigDecimal.ONE;

BigDecimal sum=BigDecimal.ZERO;
int i=1;//1835422
while(sum.subtract(BigDecimal.valueOf(15)).doubleValue()<0) {
sum=sum.add(bd.divide(BigDecimal.valueOf(i),120,BigDecimal.ROUND_HALF_UP));
//System.out.println(i+": "+sum);
i++;
}
System.out.println(i);
}
}

 

 

3、x的x次幂结果为10

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


蓝桥杯-2015校内选拔_System


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

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

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

代码:

package 校内选拔2015;

public class T3 {

public static void main(String[] args) {

//System.out.println(Math.pow(2.5, 2.5));
double a=2.5;

double c=0;

while(Math.abs(c-10)>0.000001){
c=Math.pow(a, a);
//System.out.println(c+" "+a);
a=a+0.0000001;
}
System.out.println(a);
}
}

 

 

 

4、以74开头的

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

17126425374635

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

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

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

 

 

不写代码也能推断出来:

由题目要求可知要填的数为:74 _ _ _ _ 4 _ 7 _ _ _ _ _ 
因为5和6之间分别要有5个、6个不同的数,所以5和6肯定都是在4 _ 7两边。

列出6可能的排列情况如下:
74 _ _ _ 64 _ 7 _ _ _ 6 _
74 _ _ 6 _ 4 _ 7 _ _ 6 _
74 _ 6 _ _ 4 _ 7 _ 6 _ _
746 _ _ _ 4 _ 7 6 _ _ _ _
列出5可能的排列情况如下:
74 _ _ _ 54 _ 7 _ 5 _
74 _ _ 5 _ 4 _ 7 _ 5 _ _ _
74 _ 5 _ _ 4 _ 7 5 _ _ _ _
根据6和5的排列情况再对1,2,3进行排列,最后得出的结果是74151643752362

 

 

5、勾股定理 

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

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

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

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

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

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

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

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

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

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

 

 

代码:

package 校内选拔2015;

import java.util.Scanner;

public class T5 {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
long nn=n*n;
long a=0,c=0;
long count=0;

for (int i = 1; i < n; i++) {
a=nn-i*i;
c=(long)Math.pow(a, 0.5);
if(c*c==a){
//System.out.println(n+" "+i+" "+c);
count++;
}
}
System.out.println(count/2);
}
}

 

 

8、标题:分机号

X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:

751,520,321 都满足要求,而,
766,918,201 就不符合要求。

现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?

请直接提交该数字,不要填写任何多余的内容。

 

 

代码:

package 校内选拔2015;

public class T8 {

public static void main(String[] args) {
int count=0;
for (int i = 0; i < 10; i++) {
for (int j = i+1; j < 10; j++) {
for (int h = j+1; h < 10; h++) {
//System.out.println(i+""+j+h);
count++;
}
}
}
System.out.println(count);
}
}

 

 

9、标题:五星填数

如【图1.png】的五星图案节点填上数字:1~12,除去7和11。

要求每条直线上数字和相等。


蓝桥杯-2015校内选拔_Math_02


如图就是恰当的填法。



请你利用计算机搜索所有可能的填法有多少种。

注意:旋转或镜像后相同的算同一种填法。



请提交表示方案数目的整数,不要填写任何其它内容。

 

 

代码:

package 校内选拔2015;

public class T9 {

static int count=0;
public static void main(String[] args) {

int[] data=new int[]{1,2,3,4,5,6,8,9,10,12};

f(data,0);
System.out.println(count/10);
}

private static void f(int[] data, int k) {

if(k==9){

if(check(data)){
count++;
}
}


for (int i = k; i < data.length; i++) {
{int t=data[k];data[k]=data[i];data[i]=t;};
f(data,k+1);
{int t=data[k];data[k]=data[i];data[i]=t;};
}
}

private static boolean check(int[] data) {

int n=data[0]+data[1]+data[2]+data[3];

if(n!=data[0]+data[4]+data[5]+data[6])
return false;

if(n!=data[7]+data[1]+data[4]+data[8])
return false;

if(n!=data[7]+data[2]+data[9]+data[6])
return false;

if(n!=data[3]+data[9]+data[5]+data[8])
return false;


return true;
}
}