第八届蓝桥杯省赛javaB组题目解析(二)

简介: 第八届蓝桥杯省赛javaB组题目解析

输入

一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)

输入

输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。

样例输入

02/03/04

样例输出

2002-03-04

2004-02-03

2004-03-02


资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms


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


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。


import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class num07 {
  public static String str;
  public static String str1[];
  public static Queue<nian>queue1=new PriorityQueue<>();
  public static List<nian>list=new ArrayList<>();
  public static DecimalFormat df=new DecimalFormat("00");设置格式,月份以及天数
  public static void swap(int i,int j)
  {
    String string=str1[i];
    str1[i]=str1[j];
    str1[j]=string;
  }
  public static boolean panduan1 (int year)//判断是否是闰年
  {
    if((year%4==0 && year%100!=0)||(year%400==0))
      return true;
    else {
      return false;
    }
  }
  public static boolean panduan(int year,int month,int day)//判断安排的年份是否符合事实,首先最简单的就是除2月份以外的月份,毕竟只有2月的天数是存在变化的
                                                           //这里就是主要考察闰月的相关操作
  {
    if(month>12||month<1)
      return false;
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
      if(day>31||day<1)
        return false;
    }
    else if(month==4||month==6||month==9||month==11){
      if(day>30||day<1)
        return false;
    }
    else {
      if(panduan1(year))
      {
        if (day>29||day<1)
        {
          return false;
        }
      }
      else 
      {
        if(day>28||day<1) 
          return false;
        }
    }
    return true;
  }
  public static void fullsort(int i)//将给出的数据进行全排列,排列完之后进行筛选
  {
    if(i==str1.length)
    {
      String str2;
      if(Integer.parseInt(str1[0])>59)
      {
        str2="19"+str1[0];  
      }
      else
        str2="20"+str1[0];
      int []num=new int [3];
      num[0]=Integer.parseInt(str2);
      for(int k=1;k<3;k++)
        num[k]=Integer.parseInt(str1[k]);
      if(panduan(num[0], num[1], num[2]))
        list.add(new nian(num[0], num[1], num[2])); 
      return ;
    }
    for(int j=i;j<str1.length;j++)
    {
      swap(i, j);
      fullsort(i+1);
      swap(i, j);
    }
  }
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    str=sc.next();
    str1=str.split("/");
    queue1=new PriorityQueue<>(compare);
    fullsort(0);
    for(int i=0;i<list.size();i++)
      queue1.add(list.get(i));
    int length=queue1.size();
    for(int i=0;i<length;i++)
    {
      nian nian1=queue1.poll();
      System.out.println(nian1.year+"-"+df.format(nian1.month)+"-"+df.format(nian1.day));
    }
  }
  static Comparator<nian>compare=new Comparator<nian>() {
    @Override
    public int compare(nian o1, nian o2) {
      if(o1.year==o2.year)
      {
        if(o1.month==o2.month)
        {
          return o1.day-o2.day;
        }
        return o1.month-o2.month;
      }
      else
        return o1.year-o2.year;
    }
  };
  static class nian//采用优先队列进行排序
  {
    int year;
    int month;
    int day;
    public nian() {
      this.year=0;
      this.month=0;
      this.day=0;
    }
    public nian(int year,int month,int day)
    {
      this.year=year;
      this.month=month;
      this.day=day;
    }
  }
}


第八题:

标题:包子凑数


小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。


每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。


当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。


小明想知道一共有多少种数目是包子大叔凑不出来的。


输入

第一行包含一个整数N。(1 <= N <= 100)

以下N行每行包含一个整数Ai。(1 <= Ai <= 100)

输出

一个整数代表答案。如果凑不出的数目有无限多个,输出INF。


例如,

输入:

2

4

5


程序应该输出:

6


再例如,

输入:

2

4

6


程序应该输出:

INF


样例解释:

对于样例1,凑不出的数目包括:1, 2, 3, 6, 7, 11。

对于样例2,所有奇数都凑不出来,所以有无限多个。


资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms


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


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

提交程序时,注意选择所期望的语言类型和编译器类型。


这道题目是关于数论的一道题目,主要考察互质的概念,互质的意思就是,两个数的最大公约数是1的,就称为互质


import java.util.Scanner;
public class num08 {
  public static int panduan(int a,int b)//欧几里得算法求解两个数的最大公约数
  {
    if(a<b)
    {
      int temp=a;
      a=b;
      b=temp;
    }
    if(b==0)
      return a;
    else
      return panduan(b, a%b);
  }
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int []num=new int [n];
    num[0]=sc.nextInt();
    int max=num[0];
    for(int i=1;i<n;i++)
    {
      num[i]=sc.nextInt();
      max=panduan(max, num[i]);
    }
    if(max!=1)
      System.out.println("INF");
    else
    {
      boolean dp[]=new boolean [10010];//定义一个数组,用来排查所有不能组成的数,这里范围为10010的主要意思是假设最大的情况,有100个数,每个数在100上下波动,所以范围是10010
      dp[0]=true;
      for(int i=0;i<n;i++)
      {
        for(int j=0;j+num[i]<10010;j++)
        {
          if(dp[j])
          {
            dp[j+num[i]]=true;
          }
        }
      }
      int count=0;
      for(int i=0;i<10010;i++)
      {
        if(!dp[i])
          count++;
      }
      System.out.println(count);
    }
  }
}


第九题:

标题: 分巧克力


儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。
为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:
1. 形状是正方形,边长是整数  
2. 大小相同  

例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。


当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?


输入

第一行包含两个整数N和K。(1 <= N, K <= 100000)

以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)

输入保证每位小朋友至少能获得一块1x1的巧克力。


输出

输出切出的正方形巧克力最大可能的边长。


样例输入:

2 10

6 5

5 6


样例输出:

2


资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms


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


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。


import java.util.Scanner;
public class num09 {
  public static int n;
  public static int k;
  public static int []num1;
  public static int []num2;
  public static int figure(int j,int []num1,int []num2)计数在j边长下,总共能够分得的快数
  {
    int count=0;
    for(int i=0;i<n;i++)
    {
      int i1=num1[i]/j;
      int i2=num2[i]/j;
      count+=i1*i2;
    }
    return count;
  }
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    n=sc.nextInt();
    k=sc.nextInt();
    num1=new int [n];
    num2=new int [n];
    int min=Integer.MAX_VALUE;
    for(int i=0;i<n;i++)//在输入数据的过程中,比较得出最小的那条边,因为最小的是正方形,所以,边长最大只可能是最短的那条边
    {
      num1[i]=sc.nextInt();
      num2[i]=sc.nextInt();
      if(min>num1[i])
        min=num1[i];
      if(min>num2[i])
        min=num2[i];
    }
    int max=0;
    for(int i=min;i>0;i--)//进行循环操作,如果出现块数满足就跳出
    {
      if(figure(i, num1, num2)>=k)
      {
        max=i;
        break;
      }
    }
    System.out.println(max);
  }
}


第十题:

标题: k倍区间

给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。

你能求出数列中总共有多少个K倍区间吗?


输入

第一行包含两个整数N和K。(1 <= N, K <= 100000)

以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)

输出

输出一个整数,代表K倍区间的数目。


例如,

输入:

5 2

1

2

3

4

5


程序应该输出:

6


资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 2000ms


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


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。


import java.util.Scanner;
public class num10 {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int k=sc.nextInt();
    int count=0;
    int []num=new int [n];
    for(int i=0;i<n;i++)
      num[i]=sc.nextInt();
    for(int i=1;i<n+1;i++)
    {
      for(int j=0;j+i-1<n;j++)
      {
        int sum=0;
        for(int k1=j;k1<j+i;k1++)
        {
          sum+=num[k1]; 
        }
        if(sum%k==0)
          count++;
      }
    }
    System.out.println(count);
  }
}


这里作者采用的是暴力求解,能做出来,所以感觉,很尴尬,毕竟一般采用暴力求解,很容易超时的,所以本人感觉有点尴尬。

作者很菜,如有不足,请指教!

相关文章
|
测试技术 uml 索引
软件设计师软考题目解析07 --每日五题
本文解析了五道软件设计师软考题目,包括系统测试的目标来源、UML图类型、文件系统索引节点管理、计算机系统软件层次以及HTML中<tr>标记的用途。
176 6
软件设计师软考题目解析07 --每日五题
|
JSON JavaScript 前端开发
蓝桥杯web组赛题解析和杯赛技巧
本文作者是一位自学前端两年半的大一学生,在第十五届蓝桥杯Web组比赛中获得省一和国三。文章详细解析了比赛题纲,涵盖HTML、CSS、JavaScript、Echarts和Vue等技术要点,并分享了备赛技巧和比赛经验。作者强调了多写代码和解题思路的重要性,同时提供了省赛和国赛的具体流程及注意事项。希望对参赛者有所帮助。
1035 11
|
BI 网络安全
软件设计师软考题目解析08 --每日五题
本文解析了五道软件设计师软考题目,包括信号量S的PV操作、最先获得输入信息的程序、文法G生成的字符串特性、包过滤防火墙的过滤依据以及中断的概念。
179 2
软件设计师软考题目解析08 --每日五题
|
物联网 vr&ar
软件设计师软考题目解析09 --每日五题
本文解析了五道软件设计师软考题目,包括CPU执行算术或逻辑运算时使用的寄存器、多级中断嵌套中保护断点和现场最有效的方式、64位与32位微处理器的不同、FTP服务器的默认端口以及“三网合一”所指的三网。
393 4
|
网络协议 PHP
软件设计师软考题目解析21 --每日五题
每日五题解析,包括海明码纠错、POP3协议通信模式、中断处理、HTML邮件链接创建和结构化开发方法中的接口设计等知识点。
124 1
|
算法 测试技术
软件设计师软考题目解析24 --每日五题
这篇文章提供了软件设计师软考的每日五题解析,包括测试用例设计、软件维护类型、路径覆盖测试、软件维护工具和系统改进等知识点。
220 0
软件设计师软考题目解析24 --每日五题
|
项目管理
软件设计师软考题目解析20之英语题
软件设计师软考中英语题目的解析和答题技巧,帮助考生攻克英语部分的题目。
215 0
软件设计师软考题目解析20之英语题
|
存储 数据安全/隐私保护
软件设计师软考题目解析下午题01
这篇文章提供了对软件设计师软考下午题目的解析,涉及农业基地信息化管理服务平台的人员管理、基地管理、种植管理、投入品管理和信息服务功能,并要求考生根据上下文描述和数据流图来回答问题。
420 0
软件设计师软考题目解析下午题01
|
安全 算法 网络安全
软件设计师软考题目解析15 --每日五题
这篇文章是关于软件设计师软考的题目解析,包括防火墙功能、网络连接分析、DMZ区服务器类型、拒绝服务攻击特点以及公开密钥加密算法的选择题,旨在帮助考生准备考试。
94 0
软件设计师软考题目解析15 --每日五题
|
存储 芯片
软件设计师软考题目解析10 --每日五题
五道软考题目的解析,并提供了详细的答案和解题思路。
232 0
软件设计师软考题目解析10 --每日五题

推荐镜像

更多
  • DNS
  • 下一篇
    oss云网关配置