蓝桥杯 2015 javaB组 校赛

2015年蓝桥杯校内赛 javaB组

第一题
/java中提供了对正则表达式的支持。
有的时候,恰当地使用正则,可以让我们的工作事半功倍!
如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。
注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号。
/

package B;
public class test5_1 {
	    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.0
前4项和才超过 2.0
前83项的和才超过 5.0
那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?
请填写这个整数。
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
/

package B;
public class test5_2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double sum =0.0;
		for(int i = 1;i < 10000000;i++){
			sum += 1.0 / i;
			if(sum >= 15.0){
				System.out.println(i);
				break;
			}
		}
	}

}

答案:1835421
第三题
/*
如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。
注意:只填写一个小数,不要写任何多余的符号或说明。*/
在这里插入图片描述

package B;
public class test5_3 {

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

}

答案:2.506184
第四题

今有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 B;
import java.util.Scanner;
public class test5_5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		int c = input.nextInt();
		int count = 0;
		for(int i = 1;i < c;i++){
			for(int j = 1;j < c;j++){
				if(c*c == i*i+j*j){
					count++;
					System.out.println(i+":"+j);
				}
			}
		}
		System.out.println(count/2);
	}

}

第六题

package B;

import java.util.Scanner;

public class test5_6 {
	static char[][] s = new char[9][9];
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 9; i++) {
			String str = sc.nextLine();
			s[i] = str.toCharArray();//将字符串转换成字符数组
		}
		s(0,0);
	}
	public static void s(int i,int j){
		if(i==9) {//匹配成功 输;
			for (int m = 0;m < 9; m++) {
				for (int k = 0; k < 9; k++) {
					System.out.print(s[m][k]);
				}
				System.out.println();
			}
			return;
		}
		if(s[i][j]=='0'){//找到为0的进行赋值
			for (int k = 0; k < 9; k++) {
				boolean a = true;//标记行、列、同色九宫是否出现过  出现过为false 默认未出现过
				for (int t = 0; t < 9; t++) {//判断行与列有没有出现:(char)(k+l+'0')
					if(s[i][t]==(char) (k+1+'0')||s[t][j]==(char) (k+1+'0')) {//k+1+'0':这个1是1,2,3,4....中的1
						//System.out.println(1+2+'0');
						a = false;
						break;
					}
				}
				if(a)//行、列没有出现:(char)(k+l+'0'),进行同色九宫的判断
					for (int m = (i/3)*3; m < (i/3)*3+3; m++) {//判断同色九宫是否出现:(char)(k+l+'0')
						for (int n = (j/3)*3; n < (j/3)*3+3; n++) {
							if(s[m][n]==(char) (k+1+'0')){
								a = false;
								break;
							}
						}
					}
				if(!a) continue;//判断k+1+'0'出现过,则跳过这个循环,继续进行k++的for循环,
				//若没有出现过k+1+'0',则把这个值赋给s[i][j],继续递归
				s[i][j] = (char) (k+1+'0');//赋值
				if(j==8){//递归赋值
					s(i+1,0);
				}else{
					s(i,j+1);//从第0行开始,从左到右,当j==8时,从下一行开始,从第0列开始,重复
				}
				s[i][j] = '0';//进行到后面的填空时,出现矛盾了,把前面上一个填过的空,回溯为零,再进行下一层r循环
			}
		}else{//不为’0’继续找
			if(j==8){
				s(i+1,0);
			}else{
				s(i,j+1);
			}
		}
	}	
}
			

第七题
/*G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军)。现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死队队员的独立性,要求如果一名士兵在敢死队中,他的直接上级不能在敢死队中。
请问,G将军有多少种派出敢死队的方法。注意,G将军也可以作为一个士兵进入敢死队。
输入格式
输入的第一行包含一个整数n,表示包括G将军在内的军队的人数。军队的士兵从1至n编号,G将军编号为1。
接下来n-1个数,分别表示编号为2, 3, …, n的士兵的直接上级编号,编号i的士兵的直接上级的编号小于i。
输出格式
输出一个整数,表示派出敢死队的方案数。由于数目可能很大,你只需要输出这个数除10007的余数即可。
样例输入1
3
1 1
样例输出1
4
样例说明
这四种方式分别是:

  1. 选1;
  2. 选2;
  3. 选3;
  4. 选2, 3。
    样例输入2
    7
    1 1 2 2 3 3
    样例输出2
    40*/
package B;

import java.util.ArrayList;
import java.util.Scanner;

public class test5_7 {
	  public static int n;
	  public static int MOD = 10007;
	  public static ArrayList<Integer>[] list;//存储分支树,表示上下级
	  public static long[][] dp;//存储各个可能性
	   
	  public void dfs(int root) {
	    dp[root][0] = 1;//root来
	    dp[root][1] = 1;//root不来
	    //System.out.println(list[root].size());
	    for(int i = 0;i < list[root].size();i++) {//root代指上级,i代指下级
	      int child = list[root].get(i);
	      System.out.println(child);
	      dfs(child);
	      dp[root][0] = dp[root][0] * (dp[child][0] + dp[child][1]) % MOD;//在root来的情况下:child来+child不来
	      dp[root][1] = dp[root][1] * dp[child][0] % MOD;//在root不来的情况下:child来。剔除了child不来的情况
	    }
	  }
	   
	  //@SuppressWarnings("unchecked")
	  public static void main(String[] args) {
		test5_7 test = new test5_7();
	    Scanner in = new Scanner(System.in);
	    n = in.nextInt();
	    list = new ArrayList[n + 1]; 
	    for(int i = 1;i <= n;i++)
	      list[i] = new ArrayList<Integer>();//申请列表1,2,3
	    for(int i = 2;i <= n;i++) {
	      int father = in.nextInt();//输入上级father
	      list[father].add(i);//依次将上级对应的下级添加入列表,用链表形式以父子关系存储上下级关系
	    }
	    dp = new long[n + 1][2];
	    test.dfs(1);
	    long result = (dp[1][0] + dp[1][1] - 1) % MOD;
	    System.out.println(result);
	  }
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值