2018年第九届蓝桥杯省赛Java A组真题解析(带源码)

这篇博客主要解析了2018年蓝桥杯省赛Java A组的竞赛题目,涵盖数学问题、日期计算、复数运算、几何计算等多个方面。博主提供了详细的解题思路和关键代码,帮助读者理解并解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题:分数
题目描述
1/1 + 1/2 + 1/4 + 1/8 + 1/16 + …
每项是前一项的一半,如果一共有20项,
求这个和是多少,结果用分数表示出来。
类似:
3/2
当然,这只是加了前2项而已。分子分母要求互质。

注意:
需要提交的是已经约分过的分数,中间任何位置不能含有空格。
请不要填写任何多余的文字或符号。


分析:数学问题,将所有分数都化为成第20项的分母,然后所有分子相加,最后分子和分母化简,输出最后化简的分子和分母即可

package A组2018年;
//答案1048575/524288

public class _1分数 {
	public static void main(String[] args) {
		int a=0;
		int b=0;
		// a/b
		for(int i=0;i<20;i++) {
			a += (int)Math.pow(2, i);
		}
		b = (int)Math.pow(2, 19);
		
//		System.out.println(a+" " + b+" "+gcd(a,b));
//		int i =2;
//		while(i<10) {
//			if(a%i==0 && b%i==0) {
//				a /= i;
//				b /= i;
//			}else {
//				i++;
//			}
//		}
//		System.out.println(a+" " + b+" "+gcd(a,b));
		
		System.out.println(a+"/" + b);
	}
	
	static int gcd(int a,int b) {
		if(b==0)return a;
		else return gcd(b,a%b);
	}

}

第二题:星期一

题目描述
整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?
(不要告诉我你不知道今天是星期几)

注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字。

解析:1.首先计算出19011月1日至2000年12月31日之间有几天,然后除以7,有几个周就有几个周一

2.利用今天是周几判断出1901年1月1日和2000年12月31日分别是周几,假如其中一个是周一的话,周一数量加一

package A组2018年;


//答案5217
//正确

public class _2星期一 {
	public static void main(String[] args) {
		//2022.3.31周四
		//2022.3.28周一
		//31 - 28 = 3
		
		//1.计算1901.1.1 到2022.3.28有几天
		//推算出那天是周几
//		System.out.println(chack(20220304,20220331));
//		System.out.println(chack(20220304,20220331)/7);
		//今天周四  余数为2
//		0301周二
//		0304余数6  往前退6天周五
		
//		1901年1月1日至2000年12月31日之间
//		System.out.println(chack(20200101,20220331));//729  365 +364
//		System.out.println(chack(20200101,20220331)%7);
		
		//2021年1月1日周五
//		2020年1月1日周三
		
//		System.out.println(chack(19010101,20220331));//729  365 +364
//		System.out.println(chack(19010101,20220331)%7);
//		19010101周二
		
//		2000年12月31日之
//		System.out.println(chack(20001231,20220331));//729  365 +364
//		System.out.println(chack(20001231,20220331)%7);
//		20001231周天
		
		System.out.println(chack(19010101,20001231)/7);
//		其中有5217个周一
		
	}
	
	static int chack(int a,int b) {//19010101 20220328
		int ans = 0;
		int year1 = a/10000;
		int year2 = b/10000;
		int month1 = ((a/100)%100);
		int month2 = ((b/100)%100);
		int day1 = a%100;
		int day2 = b%100;
		
		for(int i = year1;i<year2;i++) {
			//1.判断是不是闰年
			if((i%4==0&&i%100!=0) || i%400==0) {//是闰年,有356天
				ans += 366;
			}else {
				ans += 365;
			}
		
		}
		
	//2.计算月
	int[] Mday= {0,31,28,31,30,31,30,31,31,30,31,30,31};
	for(int i=1;i<month1;i++) {
		if(i==2 && f1(year1)) {
			ans -= 29;
		}else {
			ans -= Mday[i];
		}
	}
	
	for(int i=1;i<month2;i++) {
		if(i==2 && f1(year2)) {
			ans += 29;
		}else {
			ans += Mday[i];
		}
	}
	
	//3.算日期
	ans -= day1;
	ans += day2;
	
	return ans;
	
	}

	static boolean f1(int i) {
		if((i%4==0&&i%100!=0) || i%400==0)return true;
		else return false;
	}
}

第三题:复数幂
题目描述
设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。

答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i
解析:1.公式:(a+bi)(c+di)=ac+adi+bci-bd=(ac-bd)&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源治·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值