蓝桥杯刷真题——洛谷day1
10.p8680 特别数的和。4. P8780 刷题统计。6. P8717 成绩分析。1.P8598 错误票据。2.P8758 特殊年份。3. P8753 小平方。8.P8711 整除序列。9.P8722 日期识别。7. P8761 大写。5. P8760解码。
·
目录
1.P8598 错误票据
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100010;
int a[N];
int main()
{
int n;
cin>>n;
int cnt=0;
while(cin>>a[cnt++]);//数据读入数组
sort(a,a+cnt+1);
int ans1,ans2;
for(int i=0;i<cnt-1;i++)
{
if(a[i+1]-a[i]==2)
ans1=a[i]+1;
if(a[i+1]==a[i])
ans2=a[i];
}
cout<<ans1<<' '<<ans2<<endl;
return 0;
}
2.P8758 特殊年份
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n=5;
int ans=0;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
if(s[0]==s[2]&&s[3]-s[1]==1)
ans++;
}
cout<<ans;
return 0;
}
3. P8753 小平方
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int ans=0;
for(int i=1;i<n;i++)
{
int x=i*i;
if(x%n<n/2.0)
ans++;
}
cout<<ans<<endl;
return 0;
}
4. P8780 刷题统计
//过不了,时间太长
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int a,b,n;
cin>>a>>b>>n;
int sum=0,cnt=1;
while(sum<n)
{
if(cnt%7>=1&&cnt%7<=5)
sum+=a;
else
sum+=b;
cnt++;
}
cout<<cnt-1<<endl;//因为最后一次多加了一个cnt
return 0;
}
//优化版
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
long long int a,b,n;
cin>>a>>b>>n;
long long int s=5*a+2*b;//一周做的提数
long long int s1=n/s; //做了几周
long long int s2=n%s; //做了s1周后还剩几题
if(s2<=5*a) //如果工作日能完成
{
cout<<s1*7+(s2+a-1)/a;
//s1*7为整周的天数,(s2+a-1)/a是工作日需要的天数
//这里是(s2+a-1)/a而不是s2/a是使用了进一法保留整数
//及2.1保留成3 s1/a是去尾法,在这里不合理
}
else
{
cout<<s1*7+5+(s2-5*a+b-1)/b;
//(s2-5*a+b-1)/b是双休日需要的天数
}
return 0;
}
5. P8760解码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9')
{
for(int j=0;j<s[i]-'0'-1;j++)
cout<<s[i-1];
}
else cout<<s[i];
}
return 0;
}
6. P8717 成绩分析

#include<iostream>
#include<cstring>
#include<algorithm>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
double x;
double mi=1e18,mx=0,sum=0;
for(int i=0;i<n;i++)
{
cin>>x;
mx=max(mx,x);
mi=min(mi,x);
sum+=x;
}
cout<<mx<<'\n'<<mi<<'\n';
cout<<fixed<<setprecision(2)<<sum/(n)<<endl;
return 0;
}
7. P8761 大写
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
s[i]=toupper(s[i]);
}
cout<<s<<endl;
return 0;
}
8.P8711 整除序列
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
long long int n;
cin>>n;
while(n>0)
{
cout<<n<<' ';
n/=2;
}
return 0;
}
9.P8722 日期识别
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
string s;
cin>>s;
string str1=s.substr(0,3);
string str2=s.substr(3,2);
map<string,int>mp;
mp["Jan"]=1;mp["Feb"]=2;mp["Mar"]=3;mp["Apr"]=4;
mp["May"]=5;mp["Jun"]=6;mp["Jul"]=7;mp["Aug"]=8;
mp["Sep"]=9;mp["Oct"]=10;mp["Nov"]=11;mp["Dec"]=12;
cout<<mp[str1]<<' ';
if(str2[0]!='0')//记录错误:str2[0]!=0,此时会输出0,因为此时字符串中的0不是数字而是字符
cout<<str2[0];
cout<<str2[1]<<endl;
return 0;
}
10. p8680 特别数的和
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
long long int ans=0;
for(int i=1;i<=n;i++)
{
string s=to_string(i);
for(int j=0;j<s.size();j++)
{
if(s[j]=='2'||s[j]=='0'||s[j]=='1'||s[j]=='9')
{
ans+=i;
break;//错误输出718,没有break,会导致重复加,比如20只用加一次,没有break会加两次
}
}
}
cout<<ans<<endl;
return 0;
}
要点总结:
1.对于“一半”的计算记得加小数点或者*1.0
2.输出两位小数:加头文件#include<iomanip>,cout<<fixed<<setprecision(2)<<num/n;
3.字符串转大写toupper();
4.map、substr()的正确使用。
5.进一法保留整数,即实现四舍五入。
更多推荐
所有评论(0)