欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

2015年蓝桥杯省赛题解

发布时间:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2015年蓝桥杯省赛题解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题单地址:http://oj.ecustacm.cn/viewnews.php?id=1021
持续更新

目录

  • 奇妙的数字【水】
  • 加法变乘法【水】
  • 移动距离【水】
  • 打印大X【水】
  • 牌型种数【dfs】
  • 饮料换购【水】
  • 三羊献瑞【水】
  • 星系炸弹【日期模拟】
  • 手链样式【枚举】

奇妙的数字【水】

#include<bits/stdc++.h> using namespace std; typedef long long int LL; bool check(int x) {LL sum1=x*x,sum2=x*x*x;int cnt=0;set<int>st;while(sum1) st.insert(sum1%10),sum1/=10,cnt++;while(sum2) st.insert(sum2%10),sum2/=10,cnt++;if(cnt==10&&st.size()==10) return true;return false; } int main(void) {for(int i=1;i<=100000;i++) if(check(i)) {cout<<i;return 0;}return 0; }

加法变乘法【水】

#include<bits/stdc++.h> using namespace std; vector<pair<int,int>>ve; bool check(int l,int r) {int sum=0;for(int i=1;i<=49;i++) {if(i==l||i==l+1) continue;if(i==r||i==r+1) continue;sum+=i;}sum+=l*(l+1)+r*(r+1);return sum==2015; } int main(void) {for(int i=1;i<=47;i++)//枚举乘号的位置for(int j=i+2;j<=48;j++)if(check(i,j)) ve.push_back({i,j});//for(int i=0;i<ve.size();i++) cout<<ve[i].first<<" "<<ve[i].second<<endl;cout<<16;return 0; }

移动距离【水】


求坐标,算曼哈顿距离即可。

#include<bits/stdc++.h> using namespace std; int w,m,n; int getx(int n) {int x=n/w;if(n%w) x++;return x; } int gety(int n,int x) {int y;if(x%2){int sum=n-(x-1)*w;y=sum%(w+1);}else{int sum=n-(x-1)*w;y=w-(sum%(w+1))+1;}return y; } int main(void) {while(cin>>w>>m>>n){int x1=getx(m),x2=getx(n);int y1=gety(m,x1),y2=gety(n,x2);cout<<abs(x1-x2)+abs(y1-y2)<<endl;}return 0; }

打印大X【水】

#include<bits/stdc++.h> using namespace std; const int N=1010; int n,m; int main(void) {while(cin>>m>>n){int st[N][N]={0};for(int i=1;i<=n;i++){for(int j=i,k=0;k<m;k++,j++) st[i][j]=1;for(int j=n+m-1-i+1,k=0;k<m;k++,j--) st[i][j]=1;}for(int i=1;i<=n;i++){for(int j=1;j<=n+m-1;j++) {if(st[i][j]) cout<<'*';else cout<<'.';}cout<<endl;}}return 0; }

牌型种数【dfs】

#include<bits/stdc++.h> using namespace std; int cnt=0; void dfs(int index,int u) {if(u>13) return;if(index==13){if(u==13) cnt++;return;}for(int i=0;i<=4;i++) dfs(index+1,u+i); } int main(void) {dfs(0,0);cout<<cnt<<endl;return 0; }

饮料换购【水】

#include<bits/stdc++.h> using namespace std; int n,sum; int main(void) {while(cin>>n){sum=n;while(n>=3){sum+=n/3;n=n/3+n%3;}cout<<sum<<endl;}return 0; }

三羊献瑞【水】

#include<bits/stdc++.h> using namespace std; int a[10]={0,1,2,3,4,5,6,7,8,9}; int main(void) {do{int sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];int sum2=a[4]*1000+a[5]*100+a[6]*10+a[1];int sum3=a[4]*10000+a[5]*1000+a[2]*100+a[1]*10+a[7];if(sum1+sum2==sum3&&a[4]){cout<<a[4]<<a[5]<<a[6]<<a[1]<<endl;break;}}while(next_permutation(a,a+10));return 0; }

星系炸弹【日期模拟】

#include<bits/stdc++.h> using namespace std; int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool check(int x) {if((x%400==0)||(x%4==0&&x%100!=0)) return true;return false; } int y,m,d,x; int main(void) {while(cin>>y>>m>>d>>x){while(x--){if(check(y)) month[2]=29;d++;if(d>month[m]) m++,d=1;if(m>=13) y++,m=1;month[2]=28;}printf("%d-%02d-%02d\n",y,m,d);}return 0; }

手链样式【枚举】

#include<bits/stdc++.h> using namespace std; string s="aaabbbbccccc"; map<string,int>mp; int cnt=0; int main(void) {do{if(mp[s]) continue;string temp=s;for(int i=0;i<12;i++){for(int j=0;j<12;j++) temp[(j+i)%12]=s[j];//转动mp[temp]++;reverse(temp.begin(),temp.end());//翻转mp[temp]++;}cnt++;}while(next_permutation(s.begin(),s.end()));cout<<cnt;return 0; }

总结

以上是生活随笔为你收集整理的2015年蓝桥杯省赛题解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。