A-门牌制作
【问题描述】 小蓝要为一条街的住户制作门牌号。 这条街一共有 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;
#define ll long long
#define inf 0x7fffffff
int sum,t;
int main()
{
sum=0,t=0;
for(int i=1;i<=2020;i++) {
t=i;
while(t){
if(t%10==2)
sum++;
t=t/10;
}
}
cout<<sum<<endl;
return 0;
}
B-既约分数
问题描述】 如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。 例如,3/4, 5/2, 1/8, 7/1 都是既约分数。 请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1和 2020)? //直接暴力就可以了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
int gcd(int a,int b) {
return b?gcd(b,a%b):a;
}
int main() {
int d=0,sum=0;
for(int i=1; i<=2020; i++) {
for(int j=1; j<=2020; j++) {
d=gcd(i,j);
if(d==1)
sum++;
}
}
cout<<sum<<endl;
return 0;
}
C- 蛇形填数
【问题描述】 如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 7 15 … 3 5 8 14 … 4 9 13 … 10 12 … 11 … … 请你计算矩阵中第 20 行第 20 列的数是多少? //这是一个规律题 1 (14) 5 (+24) 13.。。。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
int main()
{
int sum=1;
for(int i=1;i<20;i++)
sum+=i*4;
cout<<sum<<endl;
return 0;
}
D-跑步锻炼
【问题描述】 小蓝每天都锻炼身体。正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米? //这个题目就是考查基本的日历问题 计数月,日或分钟等等 计算日的算法如下,小时分钟和秒就是在此基础上乘以相应的进制即可,月份就是在模板里面month++的时候顺便计数即可。
int syear,smonth,sday;
int countday(int year,int month,int day){
int ans=0;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(1){
if(year==syear&&month==smonth&&day==sday){
break;
}
day++;
if(isleaf(year)&&month==2){
if(day>mon[month]+1){
month++;
day=1;
}
}else{
if(day>mon[month]){
month++;
day=1;
}
}
if(month>12){
month=1;
year++;
}
ans++;
}
return ans;
}
此题代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
int month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool tian(int x) {
return x%400==0||(x%4==0&&x%100!=0);
}
int main() {
int sum=0;
int y=2000,m=1,d=1,week=6;
while(1) {
if(week==1||d==1) {
sum+=2;
}else sum++;
if(y==2020&&m==10&&d==1)
break;
if(tian(y)) {
month[2]=29;
} else month[2]=28;
if(d==month[m]) {
if(m==12){
y++;
m=1;
d=1;
}else{
m++;
d=1;
}
}else d++;
if(week==7) week=1;
else week++;
}
cout<<sum<<endl;
return 0;
}
E- 成绩统计
【问题描述】 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。 请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
【输入格式】 输入的第一行包含一个整数 n,表示考试人数。 接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
【输出格式】 输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
【样例输入】 7 80 92 56 74 88 100 0
【样例输出】 71% 43%
【评测用例规模与约定】 对于 50% 的评测用例,1 ≤ n ≤ 100。 对于所有评测用例,1 ≤ n ≤ 10000。 //这不就是送分题吗,需要西湖一四舍五入,可以转化为小数+0.5 然后取整
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
int main() {
int n;
cin>>n;
int a[10005],x=0,y=0;
for(int i=0; i<n; i++)
cin>>a[i];
for(int i=0; i<n; i++) {
if(a[i]>=85)
x++;
if(a[i]>=60)
y++;
}
int sum1=((double)x*100/n+0.5);
int sum2=((double)y*100/n+0.5);
cout<<sum2<<"%"<<endl;
cout<<sum1<<"%"<<endl;
return 0;
}
F-回文日期
【问题描述】 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。 也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。 给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA 型的回文日期各是哪一天。
【输入格式】 输入包含一个八位整数 N,表示日期。
【输出格式】 输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
【样例输入】 20200202
【样例输出】 20211202 21211212
【评测用例规模与约定】 对于所有评测用例,10000101 ≤ N ≤ 89991231,保证 N 是一个合法日期的 8 位数表示。 //自己之前在牛客上做过类似的题目,就打算用暴力过一下,结果芭比Q了,一个都没有过 代码如下
#include<iostream>
#include<algorithm>
using namespace std;
int m[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
int a,b;
cin>>a>>b;
int c,d,count=0;
for(int i=1;i<=12;i++){
for(int j=1;j<=m[i];j++){
c=(j%10)*1000+(j/10)*100+(i%10)*10+i/10;
d=c*10000+i*100+j;
if(d>=a&&d<=b)
count++;
}
}
cout<<count<<endl;
return 0;
}
总结
摆烂了最近,明天补题。。。。
|