蓝桥杯模拟赛 2
[蓝桥杯 2020 省 AB1] 解码
思路:当下几个字符组成数字n,输出n个当前字符,否则直接输出
string a,ans; cin>>a; for(int i=0;i<a.size();++i){ if(i<a.size()-1&&a[i]>=65&&a[i+1]<65){ int k=i+2; ll t=a[i+1]-'0'; while(a[k]<65&&k<a.size()){ t=t*10+(a[k]-'0'); k++; } for(ll j=0;j<t;++j)ans+=a[i]; i=k-1; } else{ ans+=a[i]; } } cout<<ans;
[蓝桥杯 2020 省 AB2] 成绩分析 思路:输入时判断最大最小和统计总分
int n,a[N],ma=-1,mi=101; ll s=0; cin>>n; for(int i=0;i<n;++i){ cin>>a[i]; if(a[i]>ma)ma=a[i]; if(a[i]<mi)mi=a[i]; s+=a[i]; } cout<<ma<<'\n'<<mi<<'\n'; cout<<fixed<<setprecision(2)<<double(s)/double(n);
[蓝桥杯 2020 省 B1] 整除序列 思路:除到小于0就停止
ll n; cin>>n; cout<<n<<' '; for(ll i=n;i>0;){ i>>=1; if(i>0)cout<<i<<' '; }
[蓝桥杯 2020 省 AB3] 日期识别 思路:注意前导0和后缀0
string a[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; string b,x,y; cin>>b; x=b.substr(0,3); y=b.substr(3,2); for(int i=0;i<12;++i) if(x==a[i]){ cout<<i+1<<' ';break; } if(y[0]!='0')cout<<y[0]; cout<<y[1];
[蓝桥杯 2020 省 AB2] 回文日期 思路:判断年的反转是否为合法的月日,是否满足ababbaba
bool check_vaild(int n) { int year = n / 10000 , month = n % 10000 / 100 , day = n % 100; if(month < 0 || month > 12) return false; if(day < 0 || (day > days[month] && month != 2)) return false; int x = 0; if(month == 2) x = year % 4 == 0 && year % 100 || year % 400 == 0; if(day > days[month] + x) return false; return true; } bool check_ABAB(int n) { int a = n / 10000000 , b = n / 1000000 % 10 , c = n /100000 % 10 , d = n / 10000 % 10; if(a == c && b == d && a != b) return true; return false; } int main() { int n; cin>>n; int falg = 1; for(int i = n / 10000;i < 10000;i ++) { int x = i , t = i; for(int j = 0;j < 4;j ++) x = x*10 + t%10 , t /= 10; if(check_vaild(x) && x > n && falg) { printf("%d\n",x); falg = 0; } if(check_vaild(x) && check_ABAB(x) && x > n) { cout<<x; break; } } return 0; }
[蓝桥杯 2020 省 B2] 平面切分 思路:每加一条不重合直线,s都会加一,若该线与已存的直线有一个交点则s++,且每个交点需不同,用set存即可
int main(){ cin.tie(0),cout.tie(0); int n,s=1; double a,b; set<pair<double,double>>l; cin>>n; for(int i=0;i<n;++i){ cin>>a>>b; if(l.count({a,b})==1)continue; if(l.size()>0) { set<pair<double,double> >p; pair<double,double> pp; for (auto t: l) { int c = t.first, d = t.second; if (a == c)continue; pp.first = (b - d) / (c - a), pp.second = a * pp.first + b; p.insert(pp); } s+=p.size(); } l.insert({a,b}); s++; } cout<<s; return 0; }
[蓝桥杯 2020 省 AB1] 走方格 思路:只能从格子的左和上走到该格,且边界都只有一条路,更新到每个格子的方案数
int main(){ cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;++i)a[i][1]=1; for(int i=1;i<=m;++i)a[1][i]=1; for(int i=2;i<=n;++i) for(int j=2;j<=m;++j) if(i%2!=0||j%2!=0)a[i][j]=a[i-1][j]+a[i][j-1]; cout<<a[n][m]; return 0; }
[蓝桥杯 2020 省 AB3] 乘法表 思路:将每个结果转化成p进制数,乘数大于等于10也需转化
int main(){ cin.tie(0),cout.tie(0); int p; vector<int>a; cin>>p; for(int i=1;i<p;++i){ for(int j=1;j<=i;++j){ if(i>=10){ cout<<char('A'+i-10)<<'*'; } else cout<<i<<'*'; if(j>=10)cout<<char('A'+j-10)<<'='; else cout<<j<<'='; a.clear(); int t=i*j; while(t){ a.push_back(t%p); t/=p; } for(int k=a.size()-1;k>=0;--k) if(a[k]>=10)cout<<char('A'+a[k]-10); else cout<<a[k]; if(j!=i)cout<<' '; } cout<<'\n'; } return 0; }
标签:10,cout,int,cin,蓝桥,&&,week2 From: https://www.cnblogs.com/bible-/p/17038359.html