目录
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