让我们康康题目
我超勇的,我要打10个哟
结果填空题
试题A:门牌制作
【问题描述】
一条gai有2020个住户,所以有1-2020这么多个门牌编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
就是最简单的问题了,一群数里面有多少个2,沙雕题目,缪杀!!!
【解题代码】
#include<iostream>
#define ll long long
using namespace std;
int check(int num){
int ans=0;
while(num>0){
if(num%10==2)ans++;
num/=10;
}
return ans;
}
int main(){
ll ans=0;
for(int i=1;i<2021;i++){
ans+=check(i);
}
cout<<ans<<endl;
return 0;
}
答案:624
试题B:既约分数
【问题描述】
如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如,3/4 , 5/2 , 1/8 , 7/1都是既约分数。请问,有多少个既约分数,分子和分母都是1 到2020 之间的整数(包括1和2020)?
超级暴力,直接给我两层for俯冲
【解题代码】
#include<iostream>
#define ll long long
using namespace std;
int gcd(int a,int b){
if(a<b){ //第一次调用的时候会用到,也可以写在外面,不放在函数里面
int temp=a;
a=b;
b=temp;
}
if(a%b==0) return b;
else return gcd(b,a%b);
}
int main(){
ll ans=0;
for(int i=1;i<2021;i++){
for(int j=1;j<2021;j++){
if(gcd(i,j)==1) ans++;
}
}
cout<<ans<<endl;
return 0;
}
答案:2481215
试题C:蛇形填数
【问题描述】
如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?
花里胡哨,直接模拟,让你无处遁形
【解题代码】
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int cnt=0;//当前数
int count=0;//当前层数
int i=0;
int j=0;// i,j为坐标
int num=1;//层数
int map[50][50];
while(1){
cnt++;
count++;
map[j][i]=cnt;
if(count>=num){
if(num%2==1){
i++;
}else{
j++;
}
num++;
count=0;
}else{
if(num%2==1){
j--;
i++;
}else{
j++;
i--;
}
}
if(num==40) break;
}
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
cout<<setw(4)<<map[i][j]<<" ";
}
cout<<endl;
}
cout<<"最后的答案:"<<map[19][19]<<endl;
return 0;
}
答案:761
试题D:跑步锻炼
【问题描述】
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了
激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年
10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
【解题代码】
#include<iostream>
using namespace std;
int isrunyear(int year){
if(year%4==0&&year%100!=0||year%400==0) return 1;
else return 0;
}
int month[2][13]{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int main(){
long long ans=2;//2020/1/1 跑2km哦
int year=2000,mon=1,day=1;
int week=6;
while(1){
int flag=isrunyear(year);
ans++;
day++;
week++;
if(week==8) week=1;
if(day>month[flag][mon]){
day=1;
mon++;
}
if(mon>12){
mon=1;
year++;
}
if(week==1||day==1) ans++;
if(year==2020&&mon==10&&day==1) break;
}
cout<<ans<<endl;
return 0;
}