2021-10-18
【问题描述 A】
小蓝要为一条街的住户制作门牌号。
这条街一共有2020位住户,门牌号从1到2020编号。
小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。
请问要制作所有的1到2020号门牌,总共需要多少个字符2?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
法一:数学求解
#include<iostream>
using namespace std;
int main() {
int count1=0,count2 = 0, count3=0,countAll = 0;
//计算个位数的2(1-9)
count1 = 1;
//计算100里面的2的个数(1-99)
count2 = count1+(10+count1)+8*count1;
//计算1000里面2的个数(1-999)
count3 = count2 + (100+count2) + 8 * count2 ;//1-99中的2 + (200-299)中的2 + (100-199)-300-999)中的2
//计算2020里面中2的个数(1000-1999) 2000-2020
countAll = count3 + count3 + (21+3);
cout << countAll << endl;
return 0;
}
法二:
#include<iostReam>
using namespace std;
int count=0;
int main(){
int tmp=0;
for(int i=1;i<=2020;i++){
tmp=i;
while(tmp){
if(tmp%10 == 2) count++;
tmp/=10;
}
}
cout<<count;
return 0;
}
答案:624
2021-10-19
【问题描述 B】
如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如3/4,5/2,1/8,7/1,都是既约分数。
请问,有多少个既约分数,分子和分母都是1到2020之间的整数(包括1和2020)?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
#include<iostream>
using namespace std;
int main() {
int count = 4039;
int num = 2;
for (int i = 2; i <= 2020; i++) {
for (int j = 2; j <= 2020; j++) {
num = 2;
if (i < j) {
while (num <= i && ((i % num !=0) || (j % num !=0))) {
num++;
}
if (num == (i + 1)) {
count++;
//cout << count << endl;
}
}
else if (i > j) {
while (num <= j && ((i % num != 0) || (j % num != 0))) {
num++;
}
if (num == (j + 1)) {
count++;
//cout << count << endl;
}
}
else {
continue;
}
}
}
cout << count << endl;
return 0;
}
答案:2481215
2021-10-24
【问题描述 C】
如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15..
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20行第20列的数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
#include<iostream>
using namespace std;
int main() {
int num = 1;//从1开始
int count = 1;
int x = 0, y = 0;//元素坐标,行为x,列为y
while (x != 19 || y != 19) {
if (x == 0 && y == 0) {
y = count;
num ++;
y--;
x++;
num++;
count++;
continue;
}
if (x == 0) {
y = count;
num++;
for (int i = 0; i < count; i++) {
y--;
x++;
num++;
if (x == 19 && y == 19) {
break;
}
}
count++;
}
else {
x = count;
num++;
for (int i = 0; i < count; i++) {
x--;
y++;
num++;
if (x == 19 && y == 19) {
break;
}
}
count++;
}
}
cout << num << endl;
return 0;
}
答案:761