![](https://noahcodemonkey.top/images/img/2015届蓝桥杯JavaC组省赛试题及答案/timg.jpg)
因为今年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 =<