ACM培训练习总结 2

来源:互联网 发布:java iterator用法 编辑:程序博客网 时间:2024/05/29 16:32

这次题目不难,就是最后一道题感觉表述不大清楚,对一个名字中数字的处理讲的不是很清楚,所以不做了。。

这次所有题交之前都没进行测试。。错了好多次。。

第一题,水题。

Ac代码:

#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=100010;int a[maxn];int main(){    int n,first=1;    while(cin>>n){        memset(a,0,sizeof(a));        int first2=1;        for(int i=0;i<n;i++) cin>>a[i];        sort(a,a+n);        if(first) first=0;        else cout<<endl;        for(int i=0;i<n/2;i++){            if(first2) first2=0;            else cout<<" ";            if(i!=n-1-i) cout<<a[i]<<" "<<a[n-1-i];            else break;        }        if(n%2==1){            if(first2) first2=0;            else cout<<" ";            cout<<a[n/2];        }        cout<<endl;    }    return 0;}

第二题,还是水题。

Ac代码:

#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=100010;int a[maxn];int main(){    int n,first=1;    while(cin>>n){        int cnt1=0,cnt2=0;        memset(a,0,sizeof(a));        int first2=1;        for(int i=0;i<n;i++) cin>>a[i];        sort(a,a+n);        if(first) first=0;        else cout<<endl;        if(n%2==1){            for(int i=0;cnt1<n/2+1;i+=2){                if(first2) first2=0;                else cout<<" ";                cout<<a[i];                cnt1++;            }            for(int i=1;cnt2<n/2;i+=2){                if(first2) first2=0;                else cout<<" ";                cout<<a[n-1-i];                cnt2++;            }            cout<<endl;        }        else{            for(int i=0;cnt1<n/2;i+=2){                if(first2) first2=0;                else cout<<" ";                cout<<a[i];                cnt1++;            }            for(int i=1;cnt2<n/2;i+=2){                if(first2) first2=0;                else cout<<" ";                cout<<a[n-i];                cnt2++;            }            cout<<endl;        }    }    return 0;}

第三题,还是水题。

Ac代码:

#include<iostream>#include<sstream>#include<string>#include<vector>#include<algorithm>using namespace std;vector<unsigned long long>a;int main(){    string s;    while(cin>>s){        for(int i=0;i<(int)s.length();i++) if(s[i]=='5') s[i]=' ';        stringstream ss(s);        unsigned long long x;        while(ss>>x)            a.push_back(x);        sort(a.begin(),a.end());        int first=1;        for(int i=0;i<(int)a.size();i++){            if(first) first=0;            else cout<<" ";            cout<<a[i];        }        cout<<endl;        a.clear();    }    return 0;}

第四题,单元格调整,一开始在A和Z的处理上出现了问题。。卡了挺久的。。

Ac代码:

#include<iostream>#include<string>#include<sstream>using namespace std;void a_to_b(string s){    string a,b;    int c=0;    for(int i=0;i<s.length();i++)        if(!isdigit(s[i])) a+=s[i];        else b+=s[i];    for(int i=0;i<a.length();i++){        c*=26;        c+=a[i]-'A'+1;    }    cout<<"R"<<b<<"C"<<c<<endl;}void b_to_a(string s){    stringstream ss(s);    int a,b,k[6],t[6];    for(int i=0;i<6;i++){        t[i]=0;        int j=5-i;        k[i]=1;        while(j--) k[i]*=26;    }    string c;    ss.get();    ss>>a;    ss.get();    ss>>b;    for(int i=0;b>0;i++){        t[i]=b/k[i];        b-=t[i]*k[i];    }    for(int i=5;i>=0;i--){        int cnt=0;        for(int j=i-1;j>=0;j--)            if(t[j]>0) cnt++;        if(t[i]<=0&&cnt){            t[i]+=26;            t[i-1]--;        }    }    for(int i=0;i<6;i++)        if(t[i]>0)            c+='A'-1+t[i];    cout<<c<<a<<endl;}int main(){    string s;    int n;    cin>>n;    cin.get();    while(n--){        getline(cin,s);        int t=0;        for(int i=1;i<s.size();i++)            if(isalpha(s[i-1])&&isdigit(s[i])) t++;        if(t==1) a_to_b(s);        else b_to_a(s);    }    return 0;}

0 0
原创粉丝点击