蓝桥杯2022省赛刷题
by lqx
三角回文数
#include <bits/stdc++.h>
using namespace std;
int main(){
int x=0;
for(int i=1;;i++){
x+=i;
if(x>20220514){
string s=to_string(x);
string t=s;
reverse(s.begin(),s.end());
if(s==t){cout<<x;return 0;}
}
}
}
裁纸刀
/*
一道简单的数学题
先看例子,边缘必须裁四次,然后得到两行三列共六张二维码。
横线5裁一次,竖线6 7 8 9各裁一次,加上裁边缘的四次,共九次。
也就是说,横向裁剪次数为【行数-1】次。
竖向裁剪次数为【(列数-1)*行数】次。
题目共20行22列,则次数为:4 + 19 + (21*20) = 443次。
*/
#include <bits/stdc++.h>
int main(){
int ans=4+19+21*20;
printf("%d",ans);
}
求和
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+9;
int n,a[N],s[N],sum;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=n;i++){
sum+=a[i]*(s[n]-s[i]);
}
cout<<sum;
}
九进制转十进制
#include <bits/stdc++.h>
using namespace std;
int main(){
cout<<2*pow(9,0)+2*pow(9,1)+2*pow(9,3);
return 0;
}
顺子日期
#include <bits/stdc++.h>
using namespace std;//顺子只有012 123
int main(){
int ans=0;//20220123
string t1="012",t2="123";
string s;
for(int i=1;i<=12;i++)//月份
for(int j=1;j<=31;j++){//日期
s="2022";
if(i<10)s+='0'+to_string(i);
else s+=to_string(i);
if(j<10)s+='0'+to_string(j);
else s+=to_string(j);
if(s.find(t1)!=-1||s.find(t2)!=-1)ans++;
}
cout<<ans;
}
刷题统计
#include <bits/stdc++.h>
using namespace std;
define int long long
signed main(){
int a,b,n,m,i,week,sum=0;
cin>>a>>b>>n;
week=n/(a*5+b*2);
m=n%(a*5+b*2);
for(i=1;sum<m;i++){
if(i<=5)sum+=a;
else sum+=b;
}
cout<<week*7+i-1;
return 0;
}
修剪灌木
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++)//找数学规律
cout<<max(i-1,n-i)*2<<'\n';
return 0;
}
排列字母
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;cin>>s;
sort(s.begin(),s.end());
cout<<s;
}
数位排序
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+9;
int n,m,b[N],a[N];//b存数位和,map会超时
bool cmp(int x,int y){
return b[x]<b[y]||(b[x]==b[y]&&x<y);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int k=i;a[i]=i;
while(k){
b[i]+=k%10;
k/=10;
}
}
sort(a+1,a+1+n,cmp);
cout<<a[m];
}
英文字母
#include <bits/stdc++.h>
using namespace std;
char a[27];//1-26
int main(){
int n;cin>>n;
for(int i=1;i<=26;i++)a[i]=char('A'+i-1);
cout<<a[n];
}
考勤刷卡
#include <bits/stdc++.h>
using namespace std;
int n,id;
set<int> a;
int main(){
cin>>n;
while(n--){
string time; cin>>time>>id;
a.insert(id);
}
for(auto it=a.begin();it!=a.end();it++)
cout<<*it<<'\n';
//for(auto i:a)cout<<i<<'\n';
}
卡片
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n;cin>>n;
cout<<ceil((sqrt(8*n+1)-1)/2);
}
星期计算
#include <bits/stdc++.h>
using namespace std;
#define int long long
int qmi(int a,int b,int p){
int res=1;
while(b){
if(b&1)res=res*a%p;
a=a*a%p;
b>>=1;
}
return res;
}
signed main(){
int a[10]; //1-7 2-1 3-2 4-3 5-4 6-5 0-6
for(int i=0;i<=6;i++){
if(i==0)a[i]=6;
else if(i==1)a[i]=7;
else a[i]=i-1;
}
int t=qmi(20,22,7);
cout<<a[t%7];
return 0;
}
字符统计
#include <bits/stdc++.h>
using namespace std;
int a[26];
int main(){
string s;cin>>s;
for(int i=0;i<s.size();i++)a[s[i]-'A']++;
int ans=0;
for(int i=0;i<26;i++)
if(ans<a[i])ans=a[i];
for(int i=0;i<26;i++)
if(a[i]==ans)
cout << (char)(i+'A');
}
质因数个数
#include <bits/stdc++.h>//暴力过40%
using namespace std;
#define int long long
int isprime(int x){
for(int i=2;i<=x/i;i++)
if(x%i==0)return 0;
return 1;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int cnt=0;
int n;cin>>n;
for(int i=2;i<=n;i++){
if(isprime(i)&&__gcd(i,n)!=1)cnt++;
}
cout<<cnt;
}
纸张尺寸
#include<bits/stdc++.h>
using namespace std;
int main(){
char c; int x;cin >> c >> x;
int a = 1189, b = 841;
while(x--){
a /= 2;
if(a < b)swap(a, b);
}
cout<<a<<'\n';
cout<<b<<'\n';
}