第七届蓝桥杯(2016年)JavaB组省赛真题解析

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七届蓝桥杯(2016年)JavaB组省赛真题解析相关的知识,希望对你有一定的参考价值。

第七届蓝桥杯(2016年)JavaB组省赛真题解析

  • 1.煤球数量
  • 有一堆煤球,堆成三角棱锥形
  • 第一层1个
  • 第二层3个
  • 第三层6个
  • 第四层10个
  • 如果有100层,一共有多少个煤球?
/**
 * 1.煤球数量
 * 有一堆煤球,堆成三角棱锥形
 * 第一层1个
 * 第二层3个
 * 第三层6个
 * 第四层10个
 * ...
 * 如果有100层,一共有多少个煤球?
 */
public class Main 
    public static void main(String[] args) 
        int level = 0, sum = 0 ;
        for(int i=1; i<=100; i++)
            level  += i ;
            sum += level ;
        
        System.out.println(sum);
    


2.生日蜡烛

public class Main 
    public static void main(String[] args) 

        for(int i=1;i<100; i++)
            int sum = 0 ;
            for(int j=i;j<100; j++)
                sum += j;
                if(sum == 236)
                    System.out.println(i);
                    break ;
                else if(sum > 236)
                    continue;
                
            
        
    


3.凑算式

public class Main 
    static int cnt = 0 ;
    static int [] arr = new int [] 1,2,3,4,5,6,7,8,9 ;
    public static void main(String[] args) 
        f(arr, 0) ;
        System.out.println(cnt);
    

    private static void f(int[] arr, int k) 
        if(k == arr.length)
            if(check())
                cnt ++ ;
            
        
        for(int j=k; j<arr.length; j++)
            swap(arr, j, k) ;
            f(arr, k+1) ;
            swap(arr, j, k) ;
        
    

    private static boolean check() 
        int A = arr[0] ;
        int B = arr[1] ;
        int C = arr[2] ;
        int DEF = arr[3]*100+arr[4]*10+arr[5] ;
        int GHI = arr[6]*100+arr[7]*10+arr[8] ;
        if(A + 1.0*B/C + 1.0*DEF/GHI == 10)
            return true ;
        
        return false ;
    

    private static void swap(int []arr, int j, int k)
        int temp = arr[j] ;
        arr[j] = arr[k] ;
        arr[k] = temp ;
    


4,5填空题略

6.方格填数

public class Main 
    static int cnt = 0 ;
    static int [] arr = new int [] 0,1,2,3,4,5,6,7,8,9 ;
    public static void main(String[] args) 
        f(arr, 0) ;
        System.out.println(cnt);
    

    private static void f(int[] arr, int k) 
        if(k == arr.length)
            if(check())
                cnt ++ ;
            
        
        for(int j=k; j<arr.length; j++)
            swap(arr, j, k) ;
            f(arr, k+1) ;
            swap(arr, j, k) ;
        
    

    private static boolean check() 
      if(Math.abs(arr[0]-arr[1])==1 || Math.abs(arr[1]-arr[2])==1)
          return false ;
      
      if(Math.abs(arr[3]-arr[4])==1 || Math.abs(arr[4]-arr[5])==1 || Math.abs(arr[5]-arr[6])==1)
          return false ;
      
      if(Math.abs(arr[7]-arr[8])==1 || Math.abs(arr[8]-arr[9])==1)
          return false ;
      
      if(Math.abs(arr[0]-arr[4])==1 || Math.abs(arr[1]-arr[5])==1 || Math.abs(arr[2]-arr[6])==1)
          return false ;
      
      if(Math.abs(arr[3]-arr[7])==1 || Math.abs(arr[4]-arr[8])==1 || Math.abs(arr[5]-arr[9])==1)
          return false ;
      
      if(Math.abs(arr[0]-arr[3])==1 || Math.abs(arr[1]-arr[4])==1 || Math.abs(arr[5]-arr[2])==1)
            return false ;
      
        if(Math.abs(arr[4]-arr[7])==1 || Math.abs(arr[5]-arr[8])==1 || Math.abs(arr[6]-arr[9])==1)
            return false ;
        
        if(Math.abs(arr[0]-arr[5])==1 || Math.abs(arr[1]-arr[6])==1)
            return false ;
        
        if(Math.abs(arr[3]-arr[8])==1 || Math.abs(arr[4]-arr[9])==1)
            return false ;
        
      return true ;
    

    private static void swap(int []arr, int j, int k)
        int temp = arr[j] ;
        arr[j] = arr[k] ;
        arr[k] = temp ;
    


7.剪邮票

方法1:先全排列,再去重,再搜索判断是否联通,
最后统计联通的个数就是我们的答案。

/**
 * 先全排列,再去重,在搜索判断是否联通
 * 最后统计联通的个数就是我们的答案,
 * 这个时间复杂度过高,运行时间较长
 */

import java.util.Set;
import java.util.TreeSet;

public class Main 
    static int cnt = 0 ;
    static int [] arr = new int [] 0,0,0,0,0,0,0,1,1,1,1,1 ;
    static  int [][] res ;
    static Set<String> set = new TreeSet<>() ;
    public static void main(String[] args) 
        f(arr, 0) ;
        System.out.println(cnt);
    

    private static void f(int[] arr, int k) 
        if(k == arr.length)
            if(check() && check1()) 
                    cnt++;
            
        
        for(int j=k; j<arr.length; j++)

            swap(arr, j, k) ;
            f(arr, k+1) ;
            swap(arr, j, k) ;
        
    

    private static boolean check1() 
        int size = set.size() ;
        String s = "" ;
        for(int i=0; i<arr.length; i++)
            s += arr[i] ;
        
        set.add(s) ;
        if(set.size() > size)
            return true ;
        else
            return false ;
        
    

    private static boolean check() 
        res = new int [3][4] ;

     for(int i=0; i<3; i++)
         for(int j=0; j<4; j++)
             res[i][j] = arr[i*4+j] ;
         
     
     int num = 0 ;
     for(int i=0; i<3; i++)
         for(int j=0; j<4; j++)
             if(res[i][j] == 1)
                 dfs( i, j) ;
                 num ++ ;
                 
             
         
     return num==1 ;
    

    private static void dfs(int x, int y) 
        res[x][y] = 0;
        if(x-1>=0 && res[x-1][y]==1)
            dfs(x-1, y) ;
        
        if(x+1<=2 && res[x+1][y]==1)
            dfs( x+1, y) ;
        
        if(y-1>=0 && res[x][y-1]==1)
            dfs( x, y-1) ;
        
        if(y+1<=3 && res[x][y+1]==1)
            dfs( x , y+1) ;
        
    

    private static void swap(int []arr, int j, int k)
        int temp = arr[j] ;
        arr[j] = arr[k] ;
        arr[k] = temp ;
    


方法2:抓取法提前去重,再搜索判断是否联通

public class Main1 
    static int [] a = 0,0,0,0,0,0,0,1,1,1,1,1 ;
    static int cnt = 0 ;
    static boolean [] vis = new boolean[12] ;
    static int [] path = new int [12] ;
    public static void main(String[] args) 
        full(0) ;
        System.out.println(cnt);
    

    private static void full(int k) 
        if(k == path.length)
            if(checks()) 以上是关于第七届蓝桥杯(2016年)JavaB组省赛真题解析的主要内容,如果未能解决你的问题,请参考以下文章

第七届蓝桥杯本科B组省赛

第七届蓝桥杯CC++B组省赛题目——方格填数

第八届蓝桥杯(2017年)JavaA组省赛真题解析

2020第十一届蓝桥杯真题JAVA B组省赛第二场答案分享(2020.10.17)

蓝桥真题——2021年蓝桥python组省赛真题+解析+代码(通俗易懂版)

蓝桥真题——2020年蓝桥python组省赛真题+解析+代码(通俗易懂版)