1. 世纪末的星期
Calendar类需要注意的两个点:
(1)Calenda.MONTH要比实际月份小1。
(2)Calendar.DAY_OF_WEEK,1代表星期天。

import java.util.Calendar;
import java.util.Scanner;
public class Main
{public static void main(String args[]){int y = 2000;Calendar cal = Calendar.getInstance();cal.set(Calendar.MONTH, 11);cal.set(Calendar.DAY_OF_MONTH, 31);while(true){int year = y+99;cal.set(Calendar.YEAR, year);if(cal.get(Calendar.DAY_OF_WEEK)==1){System.out.println(year);break;}y += 100;}}
}

答案:2299

2. 振兴中华
搜索,两条树枝,往右和往下

public class Main
{static int BoundX = 3;static int BoundY = 4;static int cnt=0;public static void main(String args[]){f(0,0);System.out.println(cnt);}static void f(int x,int y){if(x>BoundX || y>BoundY) return ;if(x==BoundX && y==BoundY) { cnt++; return; }f(x+1,y); //往下f(x,y+1); //往右}
}

答案:35

3. 梅森素数
这道题考的是快速幂乘
比如a的11次幂,11二进制可写为1011
那么就是a^1 * a^2 * a^8
那么就可以不停的幂乘,然后二进制位是1的时候就乘以此时幂乘的结果

import java.math.BigInteger;;
public class Main
{public static void main(String args[]){BigInteger a = new BigInteger("2");int k = 11213;BigInteger ans = Mi(a,k);ans = ans.subtract(BigInteger.ONE);String str = ans.toString();str = str.substring(str.length()-100,str.length());System.out.println(str);}static BigInteger Mi(BigInteger a,int b) //幂乘 a^b{BigInteger ret = new BigInteger("1");while(b>0){if((b&1)==1) ret = ret.multiply(a); //二进制位为1时,乘上此时的aa = a.multiply(a); //a自身幂乘,翻倍b = b>>1;}return ret;}
}

答案:8586718527586602439602335283513944980064327030278104224144971883680541689784796267391476087696392191

4. 颠倒的价牌
本题枚举+判断即可。
主要操作在数的翻转上
可以将数字转成String,再转成char数组,一位一位判断,首末为0,则不能倒过来,某位为3,4,7的一种也不能倒过来,某位是6,9,转为9,6.
最后再将char数组转成String,利用StringBuffer的reverse()函数翻转一下。

public class Main
{// 能倒过来的数字有 1 2 5 6 8 9 0  , 不能倒过来的有3 4 7// 倒过来为         1 2 5 9 8 6 0 ,也就是只能6,9倒过来public static void main(String args[]){for(int x=1000; x<=9999; x++){for(int y=x+1; y<=9999; y++){int rx = reverse(x);int ry = reverse(y);if(rx==0||ry==0) continue;int dx = rx-x;int dy = ry-y;if(dy>-300 && dy<-200 && dx>800 && dx<900 && (dx+dy)==558){System.out.println(x+" "+y);}}}}static int reverse(int num){String s = String.valueOf(num);char[] ch = s.toCharArray();if(ch[0]=='0'||ch[3]=='0') return 0; //首位末尾不能为0int temp=num;int cnt=3;while(temp>0){int mod = temp%10;if(mod==3||mod==4||mod==7)  return 0; // 3,4,7不能倒if(mod==6) ch[cnt] += 3;else if(mod==9) ch[cnt] -= 3;temp = temp/10;cnt--;}StringBuffer buf = new StringBuffer(new String(ch));buf.reverse(); //翻转一下return Integer.parseInt(buf.toString());}
}

输出:
1061 9088
2062 9088
5065 9088
6069 9088
8068 9088
9066 9088
所以赔钱的价格为9088。

5. 三部排序
答案:p++

6. 逆波兰表达式
这个可以去看下数据结果的前缀、中缀、后缀表达式。
填空位置的上一句 int[] v1 = evaluate(x.substring(1)); 会在遇到第一个不是运算符的数字时返回,那v2应该接下去处理。
答案:evaluate(x.substring(1+v1[1]))

7. 错误票据
这道题主要考数据的处理。首先输入每行的数据长度也即票据号个数不同,这点用String类即可处理:用String接收一行数据,然后用split()函数分割数据,需注意的是分割是以若干个空格,split(regex)中的regex应该为"\s+"(这个可以去百度Java的正则表达式匹配)。
然后是存储,因为不知道票据总个数,所以用List存储比较好,把分割出来的字符串转成Integer,add()到List中。
处理完输入,对List排序(用Collections.sort()即可),然后找断号和重号即可。

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Main
{static int N;public static void main(String args[]){Scanner sc = new Scanner(System.in);N = sc.nextInt();sc.nextLine(); //先吃掉一个换行符List<Integer> ls = new ArrayList<Integer>();String str;String[] sp;for(int i=0;i<N;i++){str = sc.nextLine();sp = str.split("\\s+");  //以若干个空格分割for(int j=0;j<sp.length;j++){ls.add(Integer.parseInt(sp[j]));}}//输入处理完//排序Collections.sort(ls);//遍历找断号和重号int m=0,n=0;for(int i=1;i<ls.size();i++){if(ls.get(i)-ls.get(i-1)==2) m = ls.get(i)-1; //断号else if(ls.get(i)-ls.get(i-1)==0) n = ls.get(i); //重号}System.out.println(m+" "+n);}}

8. 带分数
这道题可以先对1~9全排列,然后对排列的每种情况做判断,从第一个数的位数为1开始,到第一个数的位数与N的位数相同。

import java.util.Scanner;
public class Main
{static int N;static int Len;static int cnt=0;public static void main(String args[]){Scanner sc = new Scanner(System.in);N = sc.nextInt();Len = getLen(N);char[] a = new char[] {'1','2','3','4','5','6','7','8','9'};mySort(a,0);System.out.println(cnt);}static int getLen(int n){int ret=0;while(n>0){n=n/10;ret++;}return ret;}static void mySort(char a[],int k)//1~9全排列{if(k==9) {f(a); return ;}for(int i=k;i<9;i++){{char t=a[i];a[i]=a[k];a[k]=t;}mySort(a,k+1);{char t=a[i];a[i]=a[k];a[k]=t;}}}static void f(char ch[]){String str = new String(ch);for(int l=1;l<=Len;l++)  //第一个数的长度{int half=(9-l)/2;String s1 = str.substring(0, l);//取第一个数int n1 = Integer.parseInt(s1);for(int h=half;h<=half+Len/2;h++) //第二个数的长度{String s2 = str.substring(l,l+h);//取第二个数String s3 = str.substring(l+h,9);//取第三个数int n2 = Integer.parseInt(s2);int n3 = Integer.parseInt(s3);double d = n2*1.0/n3;if(n1+d==N) //判断{cnt++;}}}}
}

9. 剪格子
深搜+减枝
int[] dx = {-1,1,0,0};
int[] dy = {0,0,-1,1};
根据 x+dx[i] 和 y+dy[i] 控制往上下左右四个方向搜索。
然后记录走过格子的个数cnt,以及走过格子的数字和sum。
如果sum>数字和的一半,不用再继续搜了,减枝。
如果sum==数字和的一半,找到符合的剪法了,判断左上角包含的格子是不是最小的,不断更新min的值。

import java.util.Scanner;
public class Main
{static int M,N;static int[][] a;static boolean[][] vis; //标记走过的格子static int Half=0;static int[] dx = {-1,1,0,0}; //上下左右走 x,y坐标的变动static int[] dy = {0,0,-1,1};static int min=100;public static void main(String args[]){Scanner sc = new Scanner(System.in);M = sc.nextInt();N = sc.nextInt();a = new int[N][M];vis = new boolean[N][M];int sum = 0;for(int i=0;i<N;i++)for(int j=0;j<M;j++) {a[i][j]=sc.nextInt();sum+=a[i][j];}sc.close();if(sum%2==1) { //无法分割System.out.println("0"); return;}Half = sum/2;f(0,0,0,0);System.out.println(min);}static void f(int x,int y,int sum,int cnt) //(x,y)是当前格子的坐标,sum是走过格子的数字和,cnt是走过格子的个数{if(sum>Half) return;if(sum==Half) {min = (cnt<min)?cnt:min;return ;}vis[x][y]=true;for(int i=0;i<4;i++){int nx = x+dx[i];int ny = y+dy[i];if(nx<0||nx>=N||ny<0||ny>=M||vis[nx][ny]==true) continue;f(nx,ny,sum+a[x][y],cnt+1);}vis[x][y]=false;}}

10.大臣的旅费
这道题考点是求 “ 图的直径 “
图的直径的求法,就是任意确定一个点,找距离该点的最远点,记这个最远点为temp,再找temp的距离最远点,temp到它最远点的距离就是图的直径。
由于本题说了任意两个城市都能到达,且高速路的条数为n-1条,那这个图必然是主树。该图内肯定不会有闭环,那么处理起来就方便了,搜索时就只要保证下个节点不是当前节点的前一个就行,也就是当前为now,下个为next,前一个为from,只要next!=from,next这个点就可以往下搜。

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main
{static class Node{int id;int weigth;public Node(int id,int weigth){this.id=id;this.weigth=weigth;}}static int n;static List<Node>[] ls ;static int max=0;static int temp;public static void main(String args[]){Scanner sc = new Scanner(System.in);n = sc.nextInt();ls = new List[n+1];for(int i=0;i<=n;i++)ls[i] = new ArrayList<Node>();for(int i=1;i<n;i++){int f = sc.nextInt();int t = sc.nextInt();int w = sc.nextInt();ls[f].add(new Node(t,w));ls[t].add(new Node(f,w));}f(1,0,0); //求距离1的最远点,得到tempf(temp,0,0); //求距离temp的最远点,结束后的max为直径System.out.println(max*10+max*(max+1)/2);}static void f(int index,int from,int sum) //一个点到距离它最远点,temp在结束函数调用后为那个最远点,max为它们之间的距离{boolean flag=true;  //假设一进来认为该节点为叶子节点,就是不能往下搜了for(int x=0;x<ls[index].size();x++){int next = ls[index].get(x).id;if(next==from) continue;flag = false; //还能往下搜,不是叶子节点,改变标记f(next,index,sum+ls[index].get(x).weigth);}if(flag) //确定是叶子节点if(sum>max) { max=sum; temp=index;}}
}

这代码格式简直逼死强迫症,自己加Tab加的无语,如果有知道怎么调的,麻烦评论里教我下,谢谢~

2013年JavaA组相关推荐

  1. 第九届蓝桥杯JavaA组(2018年)省赛真题解析

    第九届蓝桥杯JavaA组(2018年)省赛真题解析 1.分数 1/1+1/2+1/4+1/8+1/16+- 每项是前一项的一半,如果一共有20项,求这个和是多少 结果用分数表示,类似: 3/2,当然这 ...

  2. 蓝桥杯2021年真题演练——2、直线(JavaA组)

    上一题:1.相乘(JavaA组) 题目大意 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. ⭐⭐在平面直角坐标系中,两点可以确定一条直线. ⭐⭐给定平面上 20 × 21​ ...

  3. 第十届蓝桥杯国赛java_2019年第十届蓝桥杯国赛总结(JavaA组)

    JavaA组国二,可以报销了~ JA死亡之组可不是盖的,rank12的排名还是拿不到国一啊(只有五个.. 出成绩的一刻波澜不惊,毕竟去年有国一了不慌哈哈哈 不过对我来说这个结果还算意料之外吧,毕竟大三 ...

  4. 2013第四届蓝桥杯JavaA组省赛真题详解

    蓝桥杯历年省赛真题汇总及题目详解 蓝桥杯历年决赛试题汇总及试题详解 目录 第一题:世纪末的星期 第二题:振兴中华 第三题:梅森素数 第四题:颠倒的价牌 第五题:三部排序 第六题:逆波兰表达式 第七题: ...

  5. 蓝桥杯Java-A组2013年试题解题笔记

    文章目录 一.世纪末的星期 二.振兴中华 三.梅森素数 四.颠倒的价牌 五.三部排序 六.逆波兰表达式 七.错误票据 更新中... 一.世纪末的星期 **解题思路:**直接调用时间API packag ...

  6. 第四届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.世纪末的星期 题目描述 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日, ...

  7. 2017年第八届蓝桥杯省赛试题(JavaA组)

    1.结果填空 (满分5分) 2.结果填空 (满分11分) 3.结果填空 (满分13分) 4.结果填空 (满分17分) 5.代码填空 (满分7分) 6.代码填空 (满分9分) 7.程序设计(满分19分) ...

  8. 2013\Province_Java_C\2.组素数

    标题: 组素数 素数就是不能再进行等分的数.比如:2 3 5 7 11 等. 9 = 3 * 3 说明它可以3等分,因而不是素数. 我们国家在1949年建国.如果只给你 1 9 4 9 这4个数字卡片 ...

  9. 2018第九届蓝桥杯JavaA组省赛真题详解

    目录 第一题:分数 第二题:星期一 第三题:复数幂 第四题:方格计数 第五题:打印图形 第六题:航班时间 第七题:三体攻击 第八题:全球变暖 第九题:倍数问题 第十题:付账问题 题解待更新 第一题:分 ...

最新文章

  1. JZOJ 5266. number
  2. 比特币、莱特币来一发?
  3. Product mass creation tool
  4. 『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
  5. 具备系统级影像技术解决方案,荣耀30系列向“唯参数论”宣战
  6. Java基础知识梳理(五)从源码了解字符串
  7. 什么是产品的愿景—从一篇博文中学得到
  8. 视频流(自适应算法)
  9. 高等数学复习之空间解析几何
  10. 信号与系统学习小窍门
  11. 基于javaEE的超市库存管理系统
  12. Python图像处理之透视变换
  13. RTX腾讯通怎么删除群聊人员
  14. Keil(C51)安装与注册
  15. 曾任5家上市企业大学校长李乾老师
  16. 今天睡眠质量记录74分
  17. 一日2篇Nature!中科大校友段镶锋团队纳米材料新成果,曾是贝尔比奖章第三位华人得主...
  18. 疫情冲击使中小微企业营收下降近七成,微型企业恢复更快
  19. Github testerSunshine/12306 Linux系统部署
  20. 一天一天学做外挂@第八天-门当户对分清楚[武林外传]

热门文章

  1. 滞回比较器的设计原理
  2. 服务器虚拟hub,什么是虚拟集线器HUB?
  3. cocos2dx 3.x 屏幕截图的两种方法及其优缺点
  4. AndroidStudio实时预览listview
  5. 【专题三】第三弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!
  6. python中字典处理函数get和setdefault的区别
  7. 好的设计师VS糟糕的设计师
  8. 什么是Vue全家桶,Vue全家桶包含哪些东西
  9. 网络结点中心性 Centrality
  10. 我的考研总结(总分396,工科)