2016蓝桥杯java试题_2016年第七届蓝桥杯国赛试题(JavaA组)

1.结果填空 (满分19分)

2.结果填空 (满分35分)

3.代码填空 (满分21分)

4.程序设计(满分47分)

5.程序设计(满分79分)

6.程序设计(满分99分)

1.阶乘位数

9的阶乘等于:362880

它的二进制表示为:1011000100110000000

这个数字共有19位。

请你计算,9999 的阶乘的二进制表示一共有多少位?

注意:需要提交的是一个整数,不要填写任何无关内容(比如说明解释等)

6aa2962317684bfc9e026771a332dfbc4aa.jpg

1abd2768c943ce7a45df7f491b99fe9a265.jpg

//118445

importjava.math.BigInteger;importjava.util.Scanner;public classMain {static Scanner sc = newScanner(System.in);public static voidmain(String[] args){

BigInteger x=BigInteger.ONE;for(int i=2;i<=9999;i++) {

x=x.multiply(BigInteger.valueOf(i));

}long ans=0;while(!x.equals(BigInteger.ZERO)) {

x=x.divide(BigInteger.valueOf(2));

ans++;

}

System.out.println(ans);

}

}

阶乘位数

2.凑平方数

把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。

比如:0, 36, 5948721

再比如:

1098524736

1, 25, 6390784

0, 4, 289, 15376

等等...

注意,0可以作为独立的数字,但不能作为多位数字的开始。

分组时,必须用完所有的数字,不能重复,不能遗漏。

如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?

注意:需要提交的是一个整数,不要填写多余内容。

d0ab49d267ff7e2540faa6736f303695033.jpg

483bdbc5efb547f52e318ac8e890dae8d62.jpg

//300

importjava.util.Scanner;public classMain {static Scanner sc = newScanner(System.in);static int[] b = new int[100005];static int[] bb = new int[15];static int[][] a = new int[100005][15];static longans;static void dfs(int c,intx) {if(c==10) {

ans++;return;

}for(int i=x+1;i<=100000;i++) {if(b[i]==1) continue;int f=0;for(int j=0;j<10;j++) {if(a[i][j]==0) continue;if(bb[j]==1) {

f=1;break;

}

}if(f==1) continue;for(int j=0;j<10;j++) {if(a[i][j]==0) continue;

bb[j]=1;

c++;

}

dfs(c,i);for(int j=0;j<10;j++) {if(a[i][j]==0) continue;

bb[j]=0;

c--;

}

}

}public static voidmain(String[] args){

a[0][0]=1;for(long i=1;i<=100000;i++) {long x = i*i;while(x>0) {if(a[(int) i][(int) (x%10)]==1) {

b[(int) i]=1;break;

}

a[(int) i][(int) (x%10)]=1;

x/=10;

}

}

ans=0;

dfs(0,-1);

System.out.println(ans);

}

}

凑平方数

3.棋子换位

有n个棋子A,n个棋子B,在棋盘上排成一行。

它们中间隔着一个空位,用“.”表示,比如:

AAA.BBB

现在需要所有的A棋子和B棋子交换位置。

移动棋子的规则是:

1. A棋子只能往右边移动,B棋子只能往左边移动。

2. 每个棋子可以移动到相邻的空位。

3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。

AAA.BBB 可以走法:

移动A ==> AA.ABBB

移动B ==> AAAB.BB

跳走的例子:

AA.ABBB ==> AABA.BB

以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。

public classMain

{static void move(char[] data, int from, intto)

{

data[to]=data[from];

data[from]= '.';

}static boolean valid(char[] data, intk)

{if(k<0 || k>=data.length) return false;return true;

}static void f(char[] data)

{while(true){boolean tag = false;for(int i=0; i

if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;if(valid(data, i+dd) && valid(data,i+dd+dd)&& data[i+dd]!=data[i] && data[i+dd+dd]=='.'){//如果能跳...

move(data, i, i+dd+dd);

System.out.println(newString(data));

tag= true;break;

}

}if(tag) continue;for(int i=0; i

if(data[i]=='.') continue;if(data[i]=='A') dd = 1;if(data[i]=='B') dd = -1;if(valid(data, i+dd) && data[i+dd]=='.'){//如果能移动...

if( _____________________ ) continue; //填空位置

move(data, i, i+dd);

System.out.println(newString(data));

tag= true;break;

}

}if(tag==false) break;

}

}public static voidmain(String[] args)

{char[] data = "AAA.BBB".toCharArray();

f(data);

}

}

注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。

0a1565be111c2e8afa3ff9383a2e6868f61.jpg

e53998abdee85ea28ae1880a88ac16128fb.jpg

valid(data, i-dd)&&valid(data, i+dd+dd)&&data[i-dd]==data[i+dd+dd]

棋子换位

4机器人塔

X星球的机器人表演拉拉队有两种服装,A和B。

他们这次表演的是搭机器人塔。

类似:

A

B B

A B A

A A B B

B B B A B

A B A B B A

队内的组塔规则是:

A 只能站在 AA 或 BB 的肩上。

B 只能站在 AB 或 BA 的肩上。

你的任务是帮助拉拉队计算一下,在给定A与B的人数时,可以组成多少种花样的塔。

输入一行两个整数 M 和 N,空格分开(0

要求输出一个整数,表示可以产生的花样种数。

例如:

用户输入:

1 2

程序应该输出:

3

再例如:

用户输入:

3 3

程序应该输出:

4

资源约定:

峰值内存消耗 < 256M

CPU消耗  < 1000ms

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

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

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

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

5.广场舞

LQ市的市民广场是一个多边形,广场上铺满了大理石的地板砖。

地板砖铺得方方正正,就像坐标轴纸一样。

以某四块砖相接的点为原点,地板砖的两条边为两个正方向,一块砖的边长为横纵坐标的单位长度,则所有横纵坐标都为整数的点都是四块砖的交点(如果在广场内)。

广场的砖单调无趣,却给跳广场舞的市民们提供了绝佳的参照物。每天傍晚,都会有大批市民前来跳舞。

舞者每次都会选一块完整的砖来跳舞,两个人不会选择同一块砖,如果一块砖在广场边上导致缺角或者边不完整,则没人会选这块砖。

(广场形状的例子参考【图1.png】)

现在,告诉你广场的形状,请帮LQ市的市长计算一下,同一时刻最多有多少市民可以在广场跳舞。

【输入格式】

输入的第一行包含一个整数n,表示广场是n边形的(因此有n个顶点)。

接下来n行,每行两个整数,依次表示n边形每个顶点的坐标(也就是说广场边缘拐弯的地方都在砖的顶角上。数据保证广场是一个简单多边形。

【输出格式】

输出一个整数,表示最多有多少市民可以在广场跳舞。

【样例输入】

5

3 3

6 4

4 1

1 -1

0 4

【样例输出】

7

【样例说明】

广场如图1.png所示,一共有7块完整的地板砖,因此最多能有7位市民一起跳舞。

【数据规模与约定】

对于30%的数据,n不超过100,横纵坐标的绝对值均不超过100。

对于50%的数据,n不超过1000,横纵坐标的绝对值均不超过1000。

对于100%的数据,n不超过1000,横纵坐标的绝对值均不超过100000000(一亿)。

资源约定:

峰值内存消耗 < 256M

CPU消耗  < 1000ms

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

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

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

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

df5c83d38ffd73af0a6c64ffcbacfc8b.png

6.生成树计数

给定一个 n*m 的格点图,包含 n 行 m 列共 n*m 个顶点,相邻的顶点之间有一条边。

【图1.png】给出了一个3*4的格点图的例子。

如果在图中删除部分顶点和其相邻的边,如上图删除第2行第3列和第3行第1列的顶点后,如【图2.png】所示。

图的生成树指包含图中的所有顶点和其中的一部分边,使得任意两个顶点之间都有由边构成的唯一路径。如果两个生成树包含有不同的边即被认为不同,则上图中共有31种不同的生成树,其中a边不选有10种,a边选有21种。

给出格点图中保留的顶点的信息,请计算该图一共有多少种不同的生成树。

【输入格式】

输入的第一行包含两个整数n, m,用空格分隔,表示格点图的行数和列数。

接下来n行,每行m个字母(中间没有分隔字符),每个字母必然是大写E或大写N,E表示对应的顶点存在,N表示对应的顶点不存在。保证存在至少一个顶点。

【输出格式】

输出一行,包含一个整数,表示生成树的个数。答案可能很大,你只需要计算答案除以1000000007的余数即可。

【样例输入】

3 4

EEEE

EENE

NEEE

【样例输出】

31

【数据规模与约定】

对于10%的数据,1<=n<=2。

对于30%的数据,1<=n<=3。

对于40%的数据,1<=n<=4。

对于50%的数据,1<=n<=5。

另有20%的数据,1<=n*m<=12。

另有10%的数据,1<=m<=15。

对于100%的数据,1<=n<=6,1<=m<=100000。

资源约定:

峰值内存消耗 < 256M

CPU消耗  < 8000ms

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

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

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

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

6c430be891b098303411d47cf156a395.png

79e87ebe7bb7ec0ea32190ef1189f1b2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值