A.门牌制作(5分,填空题)
【问题描述】
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=1,all=0;
while(n<=2020){
int x=n;
while(x){
int r=x%10;
if(r==2) all++;
x=x/10;
}
n++;
}
cout<<all<<endl;
return 0;
}
难度:签到题(简单)
题解:枚举,统计每一个门牌号字符2的个数
答案:624
B.既约分数(5分,填空题)
【问题描述】
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如,3/4 , 5/2 , 1/8 , 7/1 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
#include<bits/stdc++.h>
using namespace std;
int gcd(int i,int j){ //计算最大公约数
if(i%j==0) return j;
else return gcd(j,i%j);
}
int main(){
int sum=0;
for(int i=1;i<=2020;i++)
for(int j=1;j<=2020;j++){
if(gcd(i,j)==1) sum++;
}
cout<<sum<<endl;
return 0;
}
难度:签到题(简单)
题解:枚举,判断分子和分母是不是互质
答案:2481215
C.蛇形填数(10分,填空题)
【问题描述】
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …
…
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列
的数是多少?
#include<bits/stdc++.h>
using namespace std;
int f[40];
int main(){
f[1]=1;
for(int i=2;i<=39;i++){
f[i]=f[i-1]+i;
}
int x=(f[39]+f[38]+1)/2;
cout<<x<<endl;
return 0;
}
难度: 适中
题解:找规律,矩阵中间的值为对角线两端和的均值(2n+1个数情况下)。第n条对角线有n个数,该对角线上的最大值是1+2+...+n。可以判断第20行第20列的数在第39条斜对角线,则该对角线的中间值为(第39条对角线最大值+第38条对角线最大值+1)/2
答案:761
D.7段码(10分,填空题)
【问题描述】
小蓝要用七段码数码管来表示一种特殊的文字。
七段码上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
例如:b 发光,其他二极管不发光可以用来表达一种字符。
例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?
#include<bits/stdc++.h> //递归枚举+并查集
using namespace std;
int book[10],res=0,f[10];
int u[10]={0,1,2,3,4,5,1,3}; //存边的端点
int v[10]={0,2,3,4,5,6,6,6};
int f