2015届蓝桥杯 Java C组 省赛试题及答案

因为今年3月份要参加这一届的蓝桥杯比赛,为此刷真题并写下一些文章留些记录,不管最后的成绩如何,我努力了!加油!!!

结果填空1

隔行变色

题目

Excel 表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,…
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。

请你直接提交这个整数,千万不要填写任何多余的内容。

思路

由题可知,颜色的变化是由行号的奇偶性来判断的,所以我们只需要在给定的范围内循环一下,在循环中加入一个 if判断是奇是偶,因为题目只需要输出蓝色行的个数,我们就可以判断它是否为奇数,若是奇数则次数加1即可.

答案

15

代码
  import java.util.Scanner;

public class _01 {
   

	public static void main(String[] args) {
   
		Scanner s1 = new Scanner(System.in);
		int start = s1.nextInt();
		int end = s1.nextInt();
		int count = 0;
		for (int i = start; i <= end; i++) {
   
			if (i % 2 != 0) {
   
				count++;
			}
		}
		System.out.println(count);
	}

}

立方尾不变

题目

有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,…

请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

请提交该整数,不要填写任何多余的内容。

思路

一开始我想的很简单,就是单纯的拿10000的 for 循环中判断 i == Math.pow(i, 3) % 10 ,之后看见题目中举得例子不止我用上面代码测试出的5这个结果,发现他的结尾不一定是就是最后一位啊,应该 i 是几位它的结尾就该留几位,为了解决这个问题,我想到的是用 String 的 length 方法,详情请看代码.

答案

36

代码
public class Main {
   

	public static void main(String[] args) {
   
		int count = 0;
		for (int i = 1; i <= 10000; i++) {
   
			String str = "" + i;
			int yu = 1;
			for (int j = 0; j < str.length(); j++) {
   
				yu *= 10;
			}
			if (i == Math.pow(i, 3) % yu) {
   
				count++;
			}
		}
		System.out.println(count);
	}

}

无穷分数

题目

无穷的分数,有时会趋向于固定的数字。

请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。

请填写该浮点数,不能填写任何多余的内容。

诶呀,图片加载出了点问题!

思路

首先,很明显一看到这个题目我就想到了用递归做,但是细看了题目以后,发现有点看不懂了,他为什么没有规定出口值?那他不还要一直循环下去嘛?那这结果怎么求嘛?无奈之下,从网上查找了答案,才清楚这题目的意思,原来它的结果会随着运算的次数越多,会越来越精确一个值,我们只需要把那个大约值求出来即可.

答案

0.58198

代码
public class Main {
   

	public static void main(String[] args) {
   
		System.out.printf("%.5f", FS(1));
	}

	public static double FS(double n) {
   
		if (n >= 100) {
   
			return n;
		} else {
   
			return n / (n + FS(n + 1));
		}
	}
}

代码填空

循环节长度

题目

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153… 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。

	public static int f(int n, int m)
	{
   
		n = n % m;
		Vector v = new Vector();

		for(;;)
		{
   
			v.add(n);
			n *= 10;
			n = n % m;
			if(n==0) return 0;
			if(v.indexOf(n)>=0)  _________________________________ ;  //填空
		}
	}

注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

思路

这道题,一上来其实已经想到了如何解决,但是自己太蠢,唉,服了!!!一上来我就把代码放到eclipse中运行,把需要填空的地方我改成了让它输出 v.indexOf ,果不其然答案就在其中,看到结果一直在循环0-5,这不就是答案了嘛,然后我就使劲想啊想啊,想不懂怎么把他们搞出来,总想着把5能取出来最后加1啥的乱七八糟的东西,无奈毫无进展,只好从网上寻找答案,当看到答案时心都凉了一半,这么简单为啥就是想不到…

答案

return v.size();

代码
import java.util.Vector;

public class Main {
   

	public static void main(String[] args) {
   
		System.out.println(f(11, 13));
	}

	public static int f(int n, int m) {
   
		n = n % m;
		Vector v = new Vector();

		for (;;) {
   
			v.add(n);
			n *= 10;
			n =<
  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值