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的近似值吗?
显然,这个值是介于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。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
代码:
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;
}
}