zoukankan      html  css  js  c++  java
  • 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)

    一、标题:正则表示

        正则表达式表示了串的某种规则或规律。恰当地使用正则表达式,可以使得代码简洁、事半功倍。java的很多API都支持正则表达式作为参数。其中的String.split就是这样。

        看下面的代码,其意图为把一个或多个空格或逗号、句号分开的单词分离出来。即获得数组为:
        
        ["cat","doc","desk","push","last","this","is","what","must","be"]
        
        请在划线处填入适当代码,取得要求的效果。

        String s = "cat dog,desk push last,   this is what.   must be";

        String[] ss = s.split("______________________________");   //填空位置

        for(String k: ss) System.out.println(k);


    请严格按照格式,通过浏览器提交答案。

    注意:只提交划线部分缺少的内容,不要写其它附加内容,比如:说明性的文字或已经存在的代码。

    /**
     * 正则表达式,s表示空白字符,|表示或,*表示0个或多个,+表示一个或多个。
     * @author DaiSong
     * @Date 2013年12月1日
     */
    public class Regex {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String s = "cat dog,desk push last,   this is what.  must be";
    		String[] ss = s.split("\s*\,\s*|\s*\.\s*|\s+");   //填空位置
    		for(String k: ss) 
    			System.out.println(k);
    	}
    
    }
    
    二、题目标题: 堆煤球

        小明的爷爷很怀旧,冬天来了他还是要自己做煤球。

        并且,爷爷把煤球堆放得十分整齐有规律:最上边一层只有1个煤球。第二层4个煤球摆成正方形,再下面9个煤球也是摆成正方形。总之,第 n 层就是边长为 n 的正方形。这样的结构既通风又稳固。

        小明数了数,一共有30层,请你帮助计算一下,一共有多少个煤球? ___________

    请通过浏览器提交答案。
    注意:只提交数字,不要求解过程或公式。
    注意:不要书写其它的内容(比如:说明性的文字)。

    /**
     * 堆煤球,1~30的平方求和
     * @author DaiSong
     * @Date 2013年12月1日
     */
    public class PutBriquettes {
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int sum=0;
    		for(int i=1;i<=30;i++){
    			sum+=(i*i);
    		}
    		System.out.println(sum);
    	}
    }
    

    三、题目标题: 大小之差

        某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
        该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。

        比如:766431 - 134667 = 631764 就是具有这样特征的数字。
        
        你还能找到另一个这样的6位数吗?
        
        请填写它重新排列数位后的得到的最大数:________________  


    请通过浏览器提交答案。
    注意:只提交另一个6位数,题中已经给出的这个不要提交。
    注意:不要书写其它的内容(比如:说明性的文字)。

    import java.util.ArrayList;
    /**
     * 大小之差,字符串操作加上数组排序。
     * @author DaiSong
     * @Date 2013年12月1日
     */
    public class TheSizeDifference {
    	
    	static int[] a=new int[6];
    	static int[] b=new int[6];
    	
    	static ArrayList<String> al=new ArrayList<String>();
    	public static String BubSort(int a[]) {
    		boolean flag = true;
    		for (int i = 0; i < a.length && flag; i++) {
    			flag = false;
    			for (int j = a.length - 1; j > i; j--) {
    				if (a[j] < a[j - 1]) {
    					swap(a, j, j - 1);
    					flag = true;
    				}
    			}
    		}
    		String s="";
    		for(int i=0;i<6;i++){
    			s+=a[i];
    		}
    		return s;
    	}
    	
    	public static void swap(int[] arr,int i,int j){
    		int temp=arr[i];
    		arr[i]=arr[j];
    		arr[j]=temp;
    	}
    	
    	public static void function(int n){
    		String t1,t2,t3,t4;
    		String s=""+n;
    		if(s.indexOf("0") != -1)
    			return;
    		for(int j=0;j<6;j++){
    			a[j]=s.charAt(j)-48;
    		}
    		t1=BubSort(a);
    		StringBuffer sb=new StringBuffer(t1);
    		t2=sb.reverse().toString();
    		t3=(Integer.parseInt(t2)-Integer.parseInt(t1))+"";
    		if(t3.length()!=6)
    			return;
    		for(int j=0;j<6;j++){
    			b[j]=t3.charAt(j)-48;
    		}
    		t4=BubSort(b);
    		
    		if(t1.equals(t4)){
    			if(!al.contains(t3)){
    				al.add(t3);
    				System.out.println(t2+"-"+t1+"="+t3);
    			}else {
    				return;
    			}
    		}
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		for(int i=111111;i<=999999;i++){
    			function(i);
    		}
    	}
    }
    
    四、标题:回文数字

        观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

        本题要求你找到一些5位或6位的十进制数字。满足如下要求:
        该数字的各个数位之和等于输入的整数。


    【输入格式】
    一个正整数 n (10<n<100), 表示要求满足的数位和。

    【输出格式】
    若干行,每行包含一个满足要求的5位或6位整数。
    数字按从小到大的顺序排列。
    如果没有满足条件的,输出:-1

    【样例输入】
    44

    【样例输出】
    99899
    499994
    589985
    598895
    679976
    688886
    697796
    769967
    778877
    787787
    796697
    859958
    868868
    877778
    886688
    895598
    949949
    958859
    967769
    976679
    985589
    994499

    【样例输入2】
    60

    【样例输出2】
    -1

    【资源约定】
        峰值内存消耗 < 64M
        CPU消耗  < 1000ms

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

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

     
    import java.util.Scanner;
    /**
     * 回文数字
     * @author DaiSong
     * @Date 2013年12月1日
     */
    public class PalindromeFigures {
    	
    	public static int count(String s){
    		int sum=0;
    		for(int i=0;i<s.length();i++){
    			sum+=(s.charAt(i)-48);
    		}
    		return sum;
    	}
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner sc = new Scanner(System.in);
    		int n=sc.nextInt();
    		String s;
    		for(int i=10000;i<=999999;i++){
    			s=""+i;
    			StringBuffer sb=new StringBuffer(s); 
    			if(s.equals(sb.reverse().toString()) && count(s)==n){
    				System.out.println(s);
    			}
    		}
    	}
    }
    

    五、标题:最大子阵

        给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。
        其中,A的子矩阵指在A中行和列均连续的一块。

    【输入格式】
        输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。
        接下来n行,每行m个整数,表示矩阵A。

    【输出格式】
        输出一行,包含一个整数,表示A中最大的子矩阵中的元素个数。

    【样例输入】
    3 3
    -1 -4 3
    3 4 -1
    -5 -2 8

    【样例输出】
    10

    【样例说明】
    取最后一列,和为10。

    【数据规模与约定】
    对于50%的数据,1<=n, m<=50;
    对于100%的数据,1<=n, m<=500,A中每个元素的绝对值不超过5000。


    【资源约定】
        峰值内存消耗 < 64M
        CPU消耗  < 3000ms

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

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

    import java.util.Scanner;
    /**
     * 最大子阵,压缩矩阵为一维数组,转化为求最大字段和问题,运用动态规划求解。
     * @author DaiSong
     * @Date 2013年12月1日
     */
    public class MaximumSubmatrix {
    	 
    	 static int MAX=500;
    	 static int[][] a =new int [MAX][MAX];
    	 static int  n,m;  
    	 
    	 public static int MaxSum(int[] a,int n){
    			int start,all;
    			start=all=a[0];
    			for(int i=1;i<n;i++){
    				start=Math.max(a[i], a[i]+start);
    				all=Math.max(start,all);
    			}
    			return all;
    		}
    	 public static void main(String[] args) {
    		 Scanner cin=new Scanner(System.in);
    	     int i, j, k, Max, minMax;  
    	     n=cin.nextInt();
    	     m=cin.nextInt();
    	     for (i=0; i<n; i++)  {  
    	         for (j=0; j<m; j++){  
    	             a[i][j]=cin.nextInt();
    	         }  
    	     }  
    	     
    	     Max = Integer.MIN_VALUE;  
    	     for (i=0; i<n; i++){  
    	         minMax = MaxSum(a[i], m);  
    	         if (minMax > Max)
    	        	 Max = minMax;  
    	         for (j=i+1; j<n; j++){  
    	             for (k=0; k<n; k++){  
    	                 a[i][k] += a[j][k];  
    	             }  
    	             minMax = MaxSum(a[i], n);  
    	             if (minMax > Max)
    	            	 Max = minMax;  
    	         }  
    	     }  
    	     System.out.print(Max);  
    	 }  
    }




    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    js 那些事二 javascript中的闭包理解
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java入门
    Java入门
    Java入门
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4734109.html
Copyright © 2011-2022 走看看