第六届蓝桥杯JavaA组省赛真题

解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论

题目1、熊怪吃核桃

题目描述
森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,直到最后剩一个核桃了,直接丢掉。

有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。

请填写该数字(一个整数),不要填写任何多余的内容或说明文字。

结果:5

public class One {
    public static int eatWalnut(int walnutNum){
        int throwNum = 0;
        return eatWalnut(walnutNum, throwNum);
    }
    private static int eatWalnut(int walnutNum, int throwNum){
        if (walnutNum == 1) {
            ++throwNum;
            --walnutNum;
            return throwNum;
        }
        if (walnutNum%2 !=0 ) {
            ++throwNum;
            --walnutNum;
        }
        return eatWalnut(walnutNum/2, throwNum);
    }
    public static void main(String[] args){
        int i = eatWalnut(1543);
        System.out.print(i);
    }
}
题目2、星系炸弹

题目描述
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * 月份0~11 SimpleDateFormat可用于format、parse Calendar
 * 
 * @description TODO
 * @author frontier
 * @time 2019年3月2日 下午3:38:41 yyyy/MM/dd HH(hh):mm:ss SSS
 */
public class 结果填空2星系炸弹 {
	static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

	public static void main(String[] args) {
		Calendar calendar = new GregorianCalendar();

		calendar.set(2014, 10, 9);
		System.out.println(df.format(calendar.getTime()));
		calendar.add(Calendar.DATE, 1000);
		System.out.println(df.format(calendar.getTime()));
	}
}

题目3、九数分三组

题目描述
1~9的数字可以组成3个3位数,设为:A,B,C, 现在要求满足如下关系:
B = 2 * A
C = 3 * A

请你写出A的所有可能答案,数字间用空格分开,数字按升序排列。

注意:只提交A的值,严格按照格式要求输出。

public class Main {
	public static int[] a = new int[15];
	public static boolean[] book = new boolean[15];
	public static int n=9;
	public static void dfs(int step)
	{
		if(step== n+1)
		{
			if(2*(a[1]*100+a[2]*10+a[3]) == a[4]*100+a[5]*10+a[6] &&
					3*(a[1]*100+a[2]*10+a[3]) == a[7]*100+a[8]*10+a[9]) {
				System.out.println(a[1]+" "+a[2]+" "+a[3]);
			}
			return;
		}
		for(int x=1;x<=9;x++)
		{
			if(book[x]==false)
			{
				book[x] = true;
				a[step] = x;
				dfs(step+1);
				book[x] = false;
			}
		}
	}
public static void main(String[] args) {
	dfs(1);
}
}
题目4、循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,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) _________________________________ ; //填空
}
}

* 输入描述:  

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

* 程序头部的注释结束

*/

上代码:

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 = n % m;
      if(n==0) return 0;
        if(v.indexOf(n)>=0) return v.size()-v.indexOf(n); //填空
    }
  }

}
题目5、打印菱形
给出菱形的边长,在控制台上打印出一个菱形来。
为了便于比对空格,我们把空格用句点代替。
当边长为8时,菱形为:
.......*
......*.*
.....*...*
....
  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值