A 分数
等比数列求和,手算就行
B 星期一
5217
打开日历看1901年1月1日星期几,看后面的第一个星期一是几号,这天到最后一天总共多少天,再除七
我在网上还看到了用Excel做的
还有一个方法
把这个保存到记事本中,然后拓展名改成.vbs,再打开,就是之间的天数
msgbox datediff("d","1901-1-1","2000-12-31")
C 乘积尾零
可以用Python大数计算
两个一位数相乘等于10的只有2和5,所以两个数相乘末尾有几个零,就是乘数中共可以分解出多少对2和5
输入麻烦,没算
#include<iostream>
using namespace std;
int main()
{
int tot=0,m,n,cnt2=0,cnt5=0;
while(tot++<1000)
{
cin>>m;
n=m;
while(m%5==0)
{
cnt5++;
m/=5;
}
while(n%2==0)
{
cnt2++;
n/=2;
}
}
cout<<min(cnt2,cnt5);
return 0;
}
D 第几个幸运数
我想的是将所有符合条件的数储存在set容器之中,因为set内通过红黑树实现存储,是有顺序的,且无重复,优先队列也可,只不过要判断队列中是否有该元素。每次取出首元素并将其删除,再将它的3,5,7倍加入,到了要求的数退出,统计一共取出多少个数
注意要开longlong ,本来我觉得long就够了,结果跑半天都没结果,后来发现超范围了。
#include<iostream>
#include<set>
using namespace std;
set<long long int>save;
int main()
{
save.insert(3);
save.insert(5);
save.insert(7);
long long int cnt=0,num;
set<long long int>::iterator iter;
while(1)
{
iter=save.begin();
num=*iter;cout<<num<<endl;
save.erase(save.begin());
cnt++;
if(num==59084709587505)
break;
save.insert(num*3);
save.insert(num*5);
save.insert(num*7);
}
cout<<cnt;
return 0;
}
E 打印图像
这个代码填空题型现在没有了
不写了不写了 \ ( ̄▽ ̄)/
F 航班时间
主要就是考一个格式化输入输出
时差是一边加,一边减,所以把两个经过的时间相加除以2,时差就抵消了,就是真正经过的时间了
#include<iostream>
#include<cstdio>
using namespace std;
int getTime()
{
int h1,h2,m1,m2,s1,s2,d=0;
scanf("%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);
int t1=h1*3600+m1*60+s1;
int t2=h2*3600+m2*60+s2+d*24*3600;
return t2-t1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int t1=getTime();
int t2=getTime();
int c=(t2+t1)/2;
printf("%02d:%02d:%02d\n",c/3600,c%3600/60,c%3600%60);
}
return 0;
}
G 三体攻击
感觉是用三维的差分,今天晚了,有空再写