zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    搭建一个免费的,无限流量的Bloggithub Pages和Jekyll入门
    通过扩展方法 链式方法 为MVC 3 视图添加验证
    让移动UI模式设计者获得灵感的10个有用的网站资源
    企业级应用架构(NHibernater+Spring.Net+MVC3)_V1.0
    把博客放在Github
    实例化需求—流程
    nginx+keepalievd,实现负载均衡和故障点切换。keepalived双机热备。
    古城钟楼
    从初步使用该控件到多维数据集控件PivotGridControl
    搜索引擎的评价
  • 原文地址:https://www.cnblogs.com/lqwh/p/7533145.html
Copyright © 2011-2022 走看看