蓝桥杯真题——(世纪末的星期、振兴中华、梅森素数)

目录

1、世纪末的星期

2、振兴中华

3、梅森素数


1、世纪末的星期

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

import java.util.Calendar;

public class _01世界末的星期{
public static void main(String []args){
    Calendar calendar=Calendar.getInstance();
    for (int year=1999;year<=5000;year+=100){
        calendar.set(Calendar.YEAR,year);
        calendar.set(Calendar.MONTH,11);
        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;
        }
    }
}
}
//程序首先导入了 java.util.Calendar 类。
在 main 方法中,它创建了一个 Calendar 对象,并使用循环来设置年份从1999年开始,每次递增100年,直到10000年为止。在循环的每次迭代中,它将年份设置为当前迭代的年份(calendar.set(Calendar.YEAR, year)),将月份设置为11(即12月)(calendar.set(Calendar.MONTH,11)),将日期设置为31(即每个月的最后一天)(calendar.set(Calendar.DAY_OF_MONTH,31))。
然后,它使用 calendar.get(Calendar.DAY_OF_WEEK) 方法获取当前日期是星期几,并打印出年份和星期几的结果。如果当前日期是星期日(即 calendar.get(Calendar.DAY_OF_WEEK) ==1),则使用 break语句跳出循环。

2、振兴中华

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

public class _02振兴中华{
    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);//将两种走法的路线相加
    }
}
//这段代码是一个经典的递归问题,用于计算从起点(0,0)到终点(3,4)的路径数量。在这个问题中,每次只能向右或向上移动一步。
在给定的代码中,函数f(i, j)表示从点(i, j)到终点(3, 4)的路径数量。当i等于3或j等于4时,表示已经到达终点,返回1。
否则,递归地调用f函数,并将两种走法的路径数量相加:一种是向右移动一步,即f(i+1, j),另一种是向上移动一步,即f(i, j+1)。
最后在main函数中调用f(0, 0)来计算路径数量,并将结果打印出来。
这段代码的输出结果应该是:35。

3、梅森素数

如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”
例如:6=1+2+3
28=1+2+4+7+14
早在公元前300多年,欧几里得就给出了判定完全数的定理:
若2^n-1是素数,则2^(n-1)*(2^n-1)是完全数。
其中八表示“乘方”运算,乘方的优先级比四则运算高,例如:2^3=8,2*2^3=16,2^3-1=7
但人们很快发现,当n很大时,判定一个大数是否为素数到今天也依然是个难题。
因为法国数学家梅森的猜想,我们习惯上把形如:2^n - 1的索数称为:梅森索数。
截止2013年2月,一共只找到了48个梅森素数。 新近找到的梅森素数太大,以至于难于用一般的编程思路窥其全貌,所以我们把任务的难度降低一点:
1963年,美国伊利诺伊大学为了纪念他们找到的第23个梅森素数 n=11213,在每个寄出的信封上都印上了“2^11213-1是素数”的字样。
2^11213 -1这个数字已经很大(有3000多位),请你编程求出这个素数的十进制表示的最后100位

import java.math.BigInteger;

public class _03梅森素数{
    public static void main(String []args){
        BigInteger x=BigInteger.valueOf(2).pow(11213).subtract(BigInteger.ONE);//2^11213-1
        String s=x.toString();
        int length=s.length();
        System.out.println(length);
        String ans=s.substring(length-100);
        System.out.println(ans.length()+" "+ans);
    }
}

在java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,从原则上是可以表示“天文单位”一样。
 value.Of(参数): 这个函数的作用是将括号内的参数转换成指定的数据类型
例如以下例子:

                  int A=42;
                  BigInteger f=BigInteger.valueOf(A);
                  System.out.println("f="+f); //输出的f将会等于BigInteger型的4
                   // 答案: f=42

subtract()方法:这个函数的作用是将大整数相减(运用时前者减后者),例如以下例子:

             BigInteger c=new BigInteger("5");
             BigInteger d=new BigInteger("3");
             System.out.println("d-c="+d.subtract(c));
             //答案输出: d-c=-2

substring()是截取字符串的一部分字符函数用法
第一种:substring(int beginIndex)
返回从起始位置到字符串末尾。
第二种:substring(int beginIndex, int endIndex)
返回从起始位置到目标位置之间的字符串。但不包含目标位置
例如:

String b=”ss123456”;
      System.out.println(b.substring(2));
      System.out.println(b.substring(2,4));
//输出为:123456
//       12

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值