华东师范大学2020机试题解

1.统计卡牌的值
在这里插入图片描述

#include
#include
#include
//#includeusing namespace std;int main()
{int n;cin>>n;int answer=0;for(int i=0;i<n;++i){string str;cin>>str;for(int j=0;j<str.length();++j){if(str[j]=='J'){answer+=1;}else if(str[j]=='Q'){answer+=2;}else if(str[j]=='K'){answer+=3;}else if(str[j]=='A'){answer+=4;}}}cout<<answer<<endl;return 0;
}

2.求30的倍数
在这里插入图片描述

#include
#include
#include
#include
#includeusing namespace std;const int MAXN=1000+10;//int arr[MAXN];bool Compare(char x,char y)
{return x>y;
}int main()
{char n[MAXN];cin>>n;bool flag=false;for(int i=0;i<strlen(n);++i){if(n[i]=='0'){flag=true;break;}}if(!flag){cout<<-1;}else{int sum=0;for(int i=0;i<strlen(n);++i){sum+=n[i]-'0';}if(sum%3==0){sort(n,n+strlen(n),Compare);for(int i=0;i<strlen(n);++i){cout<<n[i];}}else{cout<<-1;}}return 0;
}

3.骑车路线
在这里插入图片描述

#include
#include
#include
#include
#include
#includeusing namespace std;const int MAXN=1000+10;int arr[MAXN];
int height[MAXN];bool Compare(char x,char y)
{return x>y;
}int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;++i){scanf("%d",&arr[i]);}for(int i=n-1;i>0;--i){height[i]=arr[i]-arr[i-1];}bool flag=true;for(int i=0;i<n;++i){if(height[i]>0){flag=false;}}if(flag){cout<<0<<endl;}else{int answer=0;for(int i=0;i<n;++i){if(height[i]>0&&height[i+1]>0){height[i+1]+=height[i];}}sort(height,height+n);cout<<height[n-1]<<endl;}}return 0;
}

4.字符串查询
在这里插入图片描述

#include
#include
#include
#include
#include
#includeusing namespace std;const int MAXN=50000+10;int pre[MAXN][26]={};int main()
{char str[MAXN];scanf("%s",str);for(int i=0;i<strlen(str);++i){char ch=str[i];int cur=(ch-'a');for(int j=0;j<26;++j){pre[i+1][j]=pre[i][j]+(j==cur);}}int n;scanf("%d",&n);while(n--){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);bool flag=true;for(int i=0;i<26;++i){int x=pre[b][i]-pre[a-1][i];int y=pre[d][i]-pre[c-1][i];if(x!=y){flag=false;break;}}if(flag){printf("DA\n");}else{printf("NE\n");}}return 0;
}

5.街灯
在这里插入图片描述

#include
#includeusing namespace std;int main()
{int n,m,k;while(cin>>n>>m>>k){vector<int> pos(m);for(int i=0;i<m;i++){cin>>pos[i]; }int s = 1,ans = 0,r = 2*k+1;for(int i=0;i<m;i++){int e = pos[i]-k;if(e > s)ans += (e-s)/r + ((e-s)%r!=0);	s = pos[i] + k + 1;}if( n + 1 > s)ans += (n+1-s)/r + ((n+1-s)%r!=0);cout<<ans<<endl;}
}

6.排序(正负数排序,0的位置不变)

#include
#include
#include
#include
#include
#includeusing namespace std;const int maxn = 100+10;vector<int>posz;
vector<int>posf;
int arr[maxn];
int b[maxn];int main(){int n;cin>>n;for(int i=0;i<n;++i){cin>>arr[i];if(arr[i]>0){posz.push_back(i);}else if(arr[i]<0){posf.push_back(i);}}reverse(posz.begin(),posz.end());sort(arr,arr+n);for(int i=0;i<n;++i){if(arr[i]<0){b[posf.back()]=arr[i];posf.pop_back();}else if(arr[i]>0){b[posz.back()]=arr[i];posz.pop_back();}else{b[i]=0;}}for(int i=0;i<n;++i){cout<<b[i]<<" ";}return 0;
}

7.链表报数

#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 10000+10;
vector<int> num;
int main(){int n,s,m,k;cin>>n>>s>>m;for(int i=0;i<n;++i){num.push_back(i+1);}for(int i=s-1;num.size()>1;i=k){k=(i+m-1)%num.size();num.erase(num.begin()+k);}cout<<num.front();return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部