2013年蓝桥杯Java B 组真题(上)

蓝桥杯Java B 组

题目大致介绍:
第一题到第三题以及第六题是结果填空,方法不限得到最后结果就行。
第四题和第五题是代码填空题,主要考察算法基本功和编程基本功。
第八题到第十题是编程题,要求编程解决问题。

各题目分数:

  1. 结果填空 (满分2分)
  2. 结果填空 (满分5分)
  3. 结果填空 (满分6分)
  4. 代码填空 (满分4分)
  5. 代码填空 (满分9分)
  6. 结果填空 (满分11分)
  7. 结果填空 (满分15分)
  8. 程序设计(满分7分)
  9. 程序设计(满分18分)
  10. 程序设计(满分23分)

1.1 世纪末的星期

曾有邪教称1999年2月31日是世界末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期-则会…
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期…
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年) 的12月31日正好是星期天(即星期日) ?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)

import java.util.Calendar;
import java.util.Iterator;

import javax.imageio.metadata.IIOMetadataFormatImpl;

public class _01世纪末的星期 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Calendar calendar = Calendar.getInstance();
        for(int year = 1999; year < 10000; year+=100) {
        	calendar.set(Calendar.YEAR, year);
        	calendar.set(Calendar.MONTH, 11);//12月
        	calendar.set(Calendar.DAY_OF_MONTH, 31);
        	System.out.println(year+" "+calendar.get(Calendar.DAY_OF_WEEK));
        	if (calendar.get(Calendar.DAY_OF_WEEK)==1) {
				break;
			}
		}
	}
}

1.2 马虎的算式

小明是个急性子,工上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是: 36 x 495 = ?
他却给抄成了: 396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的! !
因为36495=39645=17820
类似这样的巧合情况可能还有很多,比如: 27 * 594 = 297 * 54
假设a b C d e代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce这样的算式一共有多 少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
答案直接通过浏览器提交。


import org.w3c.dom.ls.LSOutput;

public class _02马虎的算式_枚举 {

	public static void main(String[] args) {
		int ans=0;
		for (int a = 1; a < 10; a++) {
			for (int b = 1; b < 10; b++) {
				if (a!=b) for (int c = 1; c < 10; c++) {
					if (c!=a && c!=b) for (int d = 1; d < 10; d++) {
						if (d!=a && d!=b && d!=c) for (int e = 1; e < 10; e++) {
							if (e!=a && e!=b && e!=c && e!=d) {
								if ((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e)) {
									ans++;
									System.out.printf("(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d*10+%d)*   (%d*10+%d)==%d\n",a,b,c,d,e,a,d,b,c,e,(a*100+d*10+b)*(c*10+e));
								}
							}
						} 
					} 
				} 
			}
		}
        System.out.println(ans);
	}
}

1.3 振兴中华

​ 小明参加 了学校的趣味运动会,其中的一个项目是:跳格子。
​ 地上画着-些格子,每个格子里写-一个字,如下所示:
在这里插入图片描述
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里, 但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算-算他一 共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
在这里插入图片描述

package _2013;

public class _03振兴中华 {

	public static void main(String[] args) {
	   //使用递归 注意点
	   //重复
	   //变化
	   //边界
	    int ans = f(0,0);
	    System.out.println(ans);
	}
	private static int f(int i ,int j) {
		if (i == 3 || j == 4) return 1;
		return f(i+1,j) + f(i, j+1);//向下或向右 将两种走向的方法相加
		
	}

}

1.4 黄金连分数(填空题)

黄金分割数0.61803…是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了-处人工加工错误,对那样-个庞然大物, 其实
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的-种是用连分数:
在这里插入图片描述
这个连分数计算的“层数”越多,它的值越接近 黄金分割数。
请你利用这一特性, 求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为: 0. 618
小数点后4位的值为: 0. 6180
小数点后5位的值为: 0. 61803
小数点后7位的值为: 0. 6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入!尾数是0也要保留!

package _2013;

import java.math.BigDecimal;
import java.math.BigInteger;

//1.化为求斐波那契相邻两项的比值,到多少项?越多越精确, n/n+1项, n再往上增加,这个比值的小数点后101位是稳定的, 也就是不变的
//2. double无法表示100亿小数、BiaIntecer和BiTDecimal
public class _04黄金连分数 {

/*	public static void main(String[] args) {
		double a=1.0;
		double b=1.0;
		for (int i = 3; i < 100; i++) {
			double t = b;
			b = a+b;
			a=t;
		}
        System.out.println(a/b);
	}
*/
	
	public static void main(String[] args) {
		BigInteger a = BigInteger.ONE;
		BigInteger b = BigInteger.ONE;
		for (int i = 3; i < 500; i++) {
			BigInteger t = b;
			b = a.add(b);
			a = t;
		}
		BigDecimal divide = new BigDecimal(a,110).divide(new BigDecimal(b,110),BigDecimal.ROUND_HALF_DOWN);
		System.out.println(divide.toPlainString().substring(0,103));
	}
}

//0.61803398874989484820458683436563811772030917980576286213544862270526046281890244969233401224637257135
1.5 有理数类

有理数就是可以表示为两个整数的比值的数字。一 -般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一 一个有理数。
这时,我们可以建立- 个“有理数类”, 下面的代码初步实现了这个目标。为了简明,它只提供了加法和乘法运算。

题目

class Rational
{
    private long ra;
    private long rb;
    private long gcd(long a, long b){
        if(b==0) return a;
        return gcd(b,a%b);
    }
    public Rational(long a, long b){
        ra = a;
        rb = b;    
        long k = gcd(ra,rb);
        if(k>1){ //需要约分
            ra /= k;  
            rb /= k;
        }
    }
    // 加法
    public Rational add(Rational x){
        return ________________________________________;//填空位置
        return new Rational(ra * x.rb + rb * x.ra, rb * x.rb);//答案
        return new Rational(this.ra * x.rb + x.ra * this.rb ,this.rb * x.rb);//答案
    }
    // 乘法
    public Rational mul(Rational x){
        return new Rational(ra*x.ra, rb*x.rb);
    }
    public String toString(){
        if(rb==1) return "" + ra;
        return ra + "/" + rb;
    }
}

计算

package _2013;

import java.util.Calendar;

public class _05有理数类填空题 {

	public static void main(String[] args) {
		Rational a = new Rational(1, 3);
		Rational b = new Rational(1, 6);
		Rational c = a.add(b);
		System.out.println(a+"+"+b+"="+c);

	}

	static class Rational{ 
		private long ra;
		private long rb;
		
		private long gcd(long a,long b) {
			if (b == 0) return a; 
			return gcd(b, a%b);
		}
		
		public Rational (long a, long b) {
			ra = a;
			rb = b;
			long k = gcd(ra,rb);
			if (k > 1) {  //需要约分
				ra /= k;
				rb /= k;
				
			}
		}
		
		//加法
		public Rational add(Rational x) {
			return new Rational(this.ra * x.rb + x.ra * this.rb ,this.rb * x.rb);          //填空位置
		}
		
		//乘法
		public Rational mul(Rational x) {
			return new Rational(ra*x.ra,rb*x.rb);
		}
		
		public String tosString() {
			if (rb == 1) return "" + ra;
			return ra + "/" +rb;
		}
		
	}
}
  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值