2011蓝桥杯java试题及部分参考答案

考生须知:

考试时间为4小时。

本试卷包含两种题型:“代码填空”与“程序设计”。总计100分。

其中代码填空:3+3+4+6+7+9+10 = 42 

程序设计:14+17+27 = 58

填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不超过一条语句(即不能出现分号)。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。考生的程序只有能运行出正确结果的时候才有机会得分。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。

对每个题目,要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

 

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

计算蔬菜总价 

为了丰富群众菜篮子,平抑菜价,相关部分组织了蔬菜的调运。今某箱中有多个品种的蔬菜。蔬菜的单价(元/公斤)存放在price数组中,蔬菜的重量(公斤)存放在weight数组中。下面的代码计算该箱蔬菜的总价,试完善之。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

	public static double getTotal(double[] price, double[] weight)
	{
		double x = 0;
		for(int i=0; i<price.length; i++)
		{
			____________________;
		}
		return x;
	}


 

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

计算行程

低碳生活,有氧运动。骑自行车出行是个好主意。小明为自己的自行车装了个计数器,可以计算出轮子转动的圈数。在一次骑车旅行中,出发时计算器的示数为begin,到达目的地时的示数为end。下列代码计算了小明一共骑行了多远(单位:公里)。其中d表示小明自行车轮子的直径(单位:米)。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

	public static double getDistance(int begin, int end, double d)
	{
		return (end-begin) * Math.PI * d * d _________; 
	}

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730


 

3. 代码填空 (满分4)

反转的串

解决同一个问题往往有许多方法。小刚很喜欢别出心裁。一天他在纸上草草写了一段程序,实现了把串s中的内容反转后放入s2的功能。也就是说,s2最后的内容变成了“7654321”。

可惜草纸出现了一处污损,请补全缺失的部分。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

		String s = "1234567";		
		String s2 = "";
		for(int i=0; i<s.length(); i++)
		{
			s2 = s.charAt(i) + __________;
		}
		System.out.println(s2);

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730

 


4. 代码填空(满分6)

最近距离

已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中,距离最近的两个点间的最小距离。

请补全缺失的代码。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

class MyPoint
{
	private double x;  // 横坐标
	private double y;  // 纵坐标
		
	public MyPoint(double x, double y)
	{
		this.x = x;
		this.y = y;
	}
	
	public static double distance(MyPoint p1, MyPoint p2)
	{
		double dx = p1.x - p2.x;
		double dy = p1.y - p2.y;		
		return Math.sqrt(dx*dx + dy*dy);
	}
	
	/*
	  lst中含有若干个点的坐标
	  返回其中距离最小的点的距离
	*/
	public static double getMinDistance(List<MyPoint> lst)
	{
		double r = ________________;
		int n = lst.size();
		for(int i=0; i<n; i++)
		{
			for(int j=i+1; j<n; j++)
			{
				MyPoint p1 = lst.get(i);
				MyPoint p2 = lst.get(j);
				
				double d = MyPoint.distance(p1,p2);
				if( d < r ) ______________;
			}
		}
		return r;		
	}
}

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730



 

5. 代码填空 (满分7)

股票风险

股票交易上的投机行为往往十分危险。假设某股票行为十分怪异,每天不是涨停(上涨10%)就是跌停(下跌10%)。假设上涨和下跌的概率均等(都是50%)。再假设交易过程没有任何手续费。某人在开始的时候持有总价值为x的该股股票,那么100个交易日后,他盈利的可能性是多少呢?

以下程序通过计算机模拟了该过程,一般的输出结果在0.3左右。请填写缺失的代码。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

int N = 10000;
	int n = 0;
	
	for(int i=0; i<N; i++)
	{
		double value = 1000.0;	
		for(int k=0; k<100; k++)
		{
			if(Math.random() > _______)
				value = value * 1.1;
			else
				value = value * 0.9;
		}
		if(____________) n++;
	}
	
	System.out.println(1.0*n/N);


此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730


 

6. 代码填空 (满分9)

猜数字

很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜。每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了。下列的代码模拟了这个过程。其中用户充当甲的角色,计算机充当乙的角色。为了能更快地猜中,计算机使用了二分法。

阅读分析代码,填写缺失的部分。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

System.out.println("请在心中想好一个数字(1~100),我来猜");
	System.out.println("我每猜一个数字,你要告诉我是“猜大了”,“猜小了”,还是“猜中”");
	Scanner scan = new Scanner(System.in);
	int v1 = 1;
	int v2 = 100;
	for(;;)
	{
		int m = (v1 + v2)/2;
		System.out.println("我猜是:" + m);
		System.out.println("1.猜得太大了");
		System.out.println("2.猜得太小了");
		System.out.println("3.猜中!");
		System.out.print("请选择:");
		int user = Integer.parseInt(scan.nextLine());
		if(user==3) break;
		if(user==1) _____________;
		if(user==2) _____________;
	}

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730




 

7. 代码填空 (满分10)

基因牛

张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。如此循环下去,请问张教授n年后有多少头母牛?

以下程序模拟了这个过程,请填写缺失的代码。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

public static class Cow 
{
	private int age;
	public Cow afterYear()
	{
		age++;
		return age > 2 ? new Cow() : ___________;
	}	
	
	public static void showTotalCowNum(int n)
	{
		List<Cow> list = new ArrayList<Cow>();
		list.add(new Cow());

		for (int i = 0; i < n; i++)
		{
			int cowCount = list.size();
			for (int j = 0; j < cowCount; j++)
			{
				Cow cow = list.get(j).afterYear();
				if (cow != null)
				{
					________________; 
					list.add(cow);
				}
			}
		}
		System.out.println(n + "年后,共有:" + list.size());		
	}
}


此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730



 

8. 程序设计(满分14分)

在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:

1. 把每个单词的首字母变为大写。

2. 把数字与字母之间用下划线字符(_)分开,使得更清晰

3. 把单词中间有多个空格的调整为1个空格。

例如:

用户输入:

you and     me what  cpp2005program

则程序输出:

You And Me What Cpp_2005_program

用户输入:

this is     a      99cat

则程序输出:

This Is A 99_cat

 

我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。

假设用户输入的串长度不超过200个字符。

要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。


此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730


 

9. 程序设计(满分17分)

方阵的主对角线之上称为“上三角”。

请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用123.的自然数列,从左上角开始,按照顺时针方向螺旋填充。

例如:当n=3时,输出:

1 2 3

6 4

5

n=4时,输出:

1  2 3 4

9 10 5

8  6

7

n=5时,输出:

  1  2  3  4  5

 12 13 14  6 

 11 15  7

 10  8

  9

程序运行时,要求用户输入整数n3~20

程序输出:方阵的上三角部分。

要求格式:每个数据宽度为4,右对齐。

要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

 

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730



10. 程序设计(满分27分)

A、BCDEFGHI10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:

   1. 如果A参加,B也参加;

   2. 如果C不参加,D也不参加;

   3. A和C中只能有一个人参加;

   4. B和D中有且仅有一个人参加;

   5. D、EFG中至少有2人参加;

   6. C和G或者都参加,或者都不参加;

   7. C、EGI中至多只能2人参加   

   8. 如果E参加,那么FG也都参加。

   9. 如果F参加,GH就不能参加

   10. 如果IJ都不参加,H必须参加

请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。

比如:

C D G J

就是一种可能的情况。

要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730

 



参考答案:

前面7个题目简单这里 略
8.
import java.util.Scanner;


public class Test8 {

	public String zhuanhua(String s) {
		
		boolean start=false;

		char[] b=s.toCharArray();
		String s1="";
		String s2="";
		String s3="";
		for(int i=0;i<b.length;i++){
			
			
			if(i>0&&b[i-1]==' '&&b[i]==' '){
				start=false;
			}
			if(i>0&&b[i-1]!=' '&&b[i]==' '){
				start=true;
			}
			if((b[i]==' '&&start)||b[i]!=' ')
			{
				s1+=b[i];
			}
		}
		//System.out.println(s1);
		char[] c=s1.toCharArray();
		if(c[0]>='a'&&c[0]<='z')
		{
			c[0]-='a'-'A';
			
		}
		s2+=c[0];
		for(int i=1;i<c.length;i++){
			if(c[i-1]==' '&&c[i]>='a'&&c[i]<='z'){
				c[i]-='a'-'A';
				s2+=c[i];
				continue;
			}
			s2+=c[i];
		}
		//System.out.println(s2);
		char[] d=s2.toCharArray();
		s3+=d[0];
		for(int i=1;i<d.length;i++){
			boolean m=((d[i-1]>='a'&&d[i-1]<='z')||(d[i-1]>='A'&&d[i-1]<='Z'))&&(d[i]>='0'&&d[i]<='9');
			boolean n=((d[i]>='a'&&d[i]<='z')||(d[i]>='A'&&d[i]<='Z'))&&(d[i-1]>='0'&&d[i-1]<='9');
			if(m||n){
				s3+="_";
			}
			
			s3+=d[i];
		}
		return s3;

	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		String s=sc.nextLine();
		System.out.println(new Test8().zhuanhua(s));

	}

}

9.
import java.util.Scanner;


public class Testtwo {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.println("put n!");
		int n=sc.nextInt();
		int k=1;
		int a[][]=new int[n][n];
		for(int i=0;i<n;i++)
		{
			for(int j=i	;j<n-1-i*2;j++)
			{
				a[i][j]=k;
				k++;
			}
			for(int j=i;j<n-i*2-1;j++)
			{
				a[j][n-1-i-j]=k;
				k++;
			}
			for(int j=i;j<n-2*i-1;j++)
			{
				a[n-1-i-j][i]=k;
				k++;
			}
		}
		if((n-1)%3==0)
			a[(n-1)/3][(n-1)/3]=k;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(a[i][j]==0)
					continue;
				if(a[i][j]<10)
				System.out.print(a[i][j]+"   ");
				else if(a[i][j]<100)
					System.out.print(a[i][j]+"  ");
				else 
					System.out.print(a[i][j]+" ");
			}
			System.out.println("");
		}
		
	}

}

10.
public class Testpailie {

	/**
	 * @param args
	 */
	public int zhuanhua1(String s) {
		int a=0;
		a=Integer.parseInt(s, 2);
		
		return a;

	}
	public String zhuanhua2(int a) {
		String s="";
		
		for(;a!=0;a=a/2)
			s+=a%2;
		//System.out.println(s);

		char[] b=s.toCharArray();
		String s1="";
		char k;
		for(int i=s.length()-1;i>=0;i--){
			k=(char) (74-i);
			if(b[i]=='1')
				
				s1+=k+" ";
			
		}
		return s1;

	}
	public void count() {
		Testpailie tp=new Testpailie();
		for(int count = 0;count<1024;count++){
			//1. 如果A参加,B也参加;
			boolean a1 = count/512%2==1?(count/256%2==1?true:false):true;
			//2. 如果C不参加,D也不参加;
			boolean a2= count/128%2==0?(count/64%4==0?true:false):true;
			//3. A和C中只能有一个人参加;
			boolean a3 = (count/512%2+count/128%2)<=1?true:false;
			//4. B和D中有且仅有一个人参加;
			boolean a4 = (count/256%2+count/64%2)<=1?true:false;
			//5. D、E、F、G、H 中至少有2人参加;
			boolean a5 = (count/4%2+count/8%2+count/16%2+count/32%2+count/64%2)>=2?true:false;
			//6. C和G或者都参加,或者都不参加;
			boolean a6 = count/128%2==1?(count/8%2==1?true:false):(count/8%2==0?true:false);
			//7. C、E、G、I中至多只能2人参加  
			boolean a7 = (count/2%2+count/8%2+count/32%2+count/128%2)<=2?true:false;
			//8. 如果E参加,那么F和G也都参加。
			boolean a8 = count/32%2==1?(count/8%4==3?true:false):true;
			//9. 如果F参加,G、H就不能参加
			boolean a9 = count/16%2==1?(count/4%4==0?true:false):true;      //a8和a9可以忽略
			//10. 如果I、J都不参加,H必须参加
			boolean a10 = count%4==0?(count/4%2==1?true:false):true;
			
			
			if(a1&&a2&&a3&&a4&&a5&&a6&&a7&&a8&&a9&&a10)
				{
				//System.out.println(count);
				System.out.println(new Testpailie().zhuanhua2(count));
				
				}
			
		}
	}
	public static void main(String[] args) {
		
		new Testpailie().count();

	}

}


此文由老猫整理,转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49841613

更多有关老猫的文章:http://blog.csdn.net/nthack5730


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值