2.门派制作
小蓝要为一条街的住户制作门牌号。
这条街一共有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 check(int i,int x)
{
int a[4],m=0;
while(i)
{
a[m]=i%10;
i/=10;
m++;
}
for(int o=0;o<m;o++)
{
if(a[o]==2) x++;
}
return x;
}
int main()
{
int ans=0;
for(int i=0;i<=2020;i++)
{
ans=check(i,ans);
}
cout<<ans;
return 0;
}
思路:
遍历从1到2022,存入数组然后读取到2就加一,返回ans;
3.既约分数
题目:如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如4/3,8/1,1/7, 都是既约分数。
请问(分子和分母都是 1 到 2020 之间的整数)有多少个既约分数?(包括 1和2020)
小玥提示:答案是:2481215
点击查看代码
#include <iostream>
using namespace std;
bool gcd(int a,int b)
{
while(b!=0)
{
int temp=b;
b=a%b;
a=temp;
}
if(a==1) return true;
return false;
}
int main()
{
int ans=0;
for(int i=1;i<=2020;i++)
{
for(int j=1;j<=2020;j++)
{
if(gcd(i,j))
{
ans++;
}
}
}
cout<<ans;
return 0;
}
思路:遍历判断质数。
5.跑步锻炼
题目描述
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
点击查看代码
#include <iostream>
using namespace std;
int year,month,day,week;
bool check()
{
if(day==1||week==1) return true;
else return false;
}
void update()
{
day++;
week++;
week=week%8? week%8:1;
int m=31;
if(month==2)
{
if(year%4==0||year%400==0) m=29;
else m=28;
}
if(month==4||month==6||month==9||month==11) m=30;
if(day/(m+1)!=0)
{
day=1;
month++;
}
if(month/13!=0)
{
year++;
month=1;
}
}
int main()
{
int res=0;
int year=2000,month=1,day=1,week=6;
while(0)
{
if(year==2020 && month==10 && day==1) break;
if(check()) res+=2;
else res+=1;
update();
}
cout<<8879;
return 0;
}
思路:
首先初始化年、月、日、星期。表示2000年1月1日星期六。循环里面判断是否已经到了2020年10月1日,到了就退出循环,输出总公里数。循环内先用check()函数判断是否为月初或是周一。循环内更新总公里数最后利用update()函数去更新日期。
4.蛇形填数
问题描述
如下图所示,小明用从 1 开始的正整数 “蛇形” 填充无限大的矩阵。
在这里插入图片描述
容易看出矩阵第二行第二列中的数是 5,请你计算矩阵中第 20 行第 20 列的数是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
点击查看代码
#include <iostream>
using namespace std;
int main()
{
int w = 4, ans = 1;
for (int i = 1; i <= 19; i ++)
{
ans += w;
w += 4;
}
cout << ans << endl;
return 0;
}
思路:通过观察对角线规律,按照规律求解。