第一题:分数
题目描述
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)&