• 2018 科大讯飞笔试编程题


    第一题:争吵问题

    有一个队列,每个人要么朝左边(L表示),要么朝右边(R表示),因为每个人都讨厌其他任何人,只要两人面对面就会发生真吵。真吵结果是胜者留在队列中,败的人移除队中。

    如果序列中有多对争吵,可以任选一对,胜者留在队中,败者出局,求最后队列最少人数是多少。

    例子:

    LRLRLRR      

    输出:3  

    LRR。

    思路:这道题找到方法了就很简单,依据题意 如果要真吵就只有  RL (两人对面)这种情况  ,其他  LL   RR   LR 都不会发生真吵。

    所以我们只要从左边向右找到第一个R,从右边向左找到第一个L。那么这两人以及之间的人最终只有一个人留下。

    程序代码如下:

    #include<iostream>
    #include<string>
    int main(){
        string str;
        while(cin>>str){
            int n=str.size();
            int m=-1,k=-1;
            for(int i=0;i<n;i++)
                if(str[i]=='R'){
                    m=i;
                    break;
                }
                for(int i=n-1;i>=0;i--)
                    if(str[i]=='L'){
                        k=i;
                        break;
                    }
                    if(m==-1||k==-1||k<m)
                        cout<<n<<endl;
                    else
                        cout<<n-(k-m)<<endl;
        }
        return 0;
    }

    第二题:球队问题

    有n对球队进入总决赛,现在要进行淘汰赛,每每两队都进行一场比赛,最终前n/2队进入下一轮淘汰赛。

    排名规则:

    球队胜一场得3分,平一场得1分,输一次得0分。

    积分越高排名越前,积分相同,看净胜球数,越多越靠前,净胜球数相同,看进球数,进球越多越靠前(例子最终都会排出名次)。

    求进入淘汰赛的球队。

    例子:

    4
    A
    B
    C
    D
    A-B 3:1
    A-C 2:1
    A-D 0:3
    B-C 5:6
    B-D 1:2
    C-D 1:1

    输出:

    D
    C

    程序代码如下:

    #include<iostream>
    #include<string>
    #include<map>
    #include<vector>
    #include <iomanip>
    using namespace std;
    class score{
    public:
        int cnt;       //球队编号
        int jifen;     //积分
        int jinshen;   //净胜球
        int jinqiu;    //进球数
        int fuqiu;    // 输球数
        score(){jifen=0;jinshen=0;jinqiu=0;fuqiu=0;cnt=0;}
        //void getjinshen(){jinshen=jinqiu-fuqiu;}
    };
    
    int main(){
        int n;
        while(cin>>n){
            vector<score> jj(n);
            map<string,int> a;
            map<int,string> b;
            string str;
            int cnt=0;
            for(int i=0;i<n;i++){
                cin>>str;
                a.insert(make_pair(str,cnt));    //str  对应  cnt
                b.insert(make_pair(cnt++,str));  //cnt  对应  str
            }
    
            for(int i=0;i<n;i++)
                jj[i].cnt=i;
                
            getchar();
    
            for(int i=0;i<n*(n-1)/2;i++){
                getline(cin,str);
                int k,k2,k3,m,f;
                k=str.find('-');  
                string s1,s2,s3,s4;
                s1=str.substr(0,k);      //球队1名称
                k2=str.find(' ');
                s2=str.substr(k+1,k2-k-1);   //球队2名称   
                k3=str.find(':');
                s3=str.substr(k2+1,k3-k2-1);  //球队1进球数
                s4=str.substr(k3+1);     //球队2进球数
                m=a[s1];  //球队1对应的编号
                f=a[s2];  //球队2对应的编号
                int i3=0,i4=0;
                for(int i=0; i<s3.size();i++)
                {
                    i3=i3*10+s3[i]-'0';
                }
                for(int i=0; i<s4.size();i++)
                {
                    i4=i4*10+s4[i]-'0';
                }
    
                jj[m].jinqiu+=i3;  //进球数
                jj[f].jinqiu+=i4;
                jj[m].fuqiu+=i4;  //输球数
                jj[f].fuqiu+=i3;
    
                if(i3==i4){
                    jj[m].jifen+=1;
                    jj[f].jifen+=1;
                }
                if(i3<i4){
                    jj[f].jifen+=3;
                }else jj[m].jifen+=3;
            }
            for(int i=0;i<n;i++){
                jj[i].jinshen=jj[i].jinqiu-jj[i].fuqiu;
            }
            cout<<"==============================================================================="<<endl;
            cout<<setw(16)<<"球队名"<<setw(8)<<"积分"<<setw(10)<<"净胜球"<<setw(10)<<"进球数"<<endl;
            for (int i=0;i<n;i++){
                cout<<setw(16)<<b.at(i)<<setw(8)<<jj[i].jifen<<setw(10)<<jj[i].jinshen<<setw(10)<<jj[i].jinqiu<<endl;
            }
            cout<<"==============================================================================="<<endl;
            for(int i=0;i<n-1;i++){
                int u=i;
                for(int j=i+1;j<n;j++){
                    if(jj[j].jifen>jj[u].jifen)
                        u=j;
                    else if(jj[j].jifen==jj[u].jifen){
                        if(jj[j].jinshen>jj[u].jinshen)
                            u=j;
                        else
                            if(jj[j].jinqiu>jj[u].jinqiu)
                                u=j;
                    }
                }
                score temp;
                temp=jj[i];
                jj[i]=jj[u];
                jj[u]=temp;
            }
            cout<<"排名后"<<endl;
            cout<<"==============================================================================="<<endl;
            cout<<setw(16)<<"球队名"<<setw(8)<<"积分"<<setw(10)<<"净胜球"<<setw(10)<<"进球数"<<endl;
            for (int i=0;i<n;i++){
                cout<<setw(16)<<b.at(jj[i].cnt)<<setw(8)<<jj[i].jifen<<setw(10)<<jj[i].jinshen<<setw(10)<<jj[i].jinqiu<<endl;
            }
            cout<<"==============================================================================="<<endl;
    
            cout<<""<<n/2<<"名球队"<<endl;
            for(int i=0;i<n/2;i++){
                str=b.at(jj[i].cnt); 
                cout<<str<<endl;
            }
    
        }
        return 0;
    }
  • 相关阅读:
    把影响集中到一个点
    How to avoid Over-fitting using Regularization?
    适定性问题
    Numerical Differentiation 数值微分
    What Every Computer Scientist Should Know About Floating-Point Arithmetic
    Generally a good method to avoid this is to randomly shuffle the data prior to each epoch of training.
    What is the difference between iterations and epochs in Convolution neural networks?
    Every norm is a convex function
    Moore-Penrose Matrix Inverse 摩尔-彭若斯广义逆 埃尔米特矩阵 Hermitian matrix
    perl 类里的函数调用其他类的函数
  • 原文地址:https://www.cnblogs.com/lqwh/p/7533145.html
Copyright © 2020-2023  润新知