zoukankan      html  css  js  c++  java
  • 2020 10 10 天梯赛

    5:

    我能说这个代码调试了一天吗?

    思路:

    getline函数输入,然后遍历字符串,记录6出现的次数,如果连续6的次数大于3,将第一个6换成9,然后删除剩下的6,之后更新6的次数、s的长度以及下标i,继续记录6的次数,如果连续6的次数大于9,则将第一个6换成2,第二个6换成7,删除剩余的6,更新数据。

    一直WA是因为在更新数据的时候先更新的coun,即6的次数,导致在更新i时出错,因为i的更新是基于coun的。

    代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    int main()

    {

        int n,i,j,k;

        string s;

        getline(cin,s);

        int coun=0;

        int start=0;

        int len=s.size();

        if(s[0]=='6')

        {

            start=0;

            coun=1;

        }

        for(i=1; i<len; i++)

        {

            if(s[i]=='6'&&s[i-1]!='6')

            {

                //cout<<"ceshi"<<endl;

                start=i;

                coun++;

                //cout<<"start="<<start<<endl;

            }

            else if(s[i]=='6')

            {

                //cout<<"ceshi"<<endl;

                coun++;

            }

            else if(s[i]!='6')

            {

                //cout<<"ceshi"<<endl;

                //cout<<coun<<endl;

                if(coun>9)

                {

                    s[start]='2';

                    s[start+1]='7';

                    s.erase(start+2,coun-2);

                    len-=coun-2;

                    i-=coun-1;

                    coun=0;

                   // i--;

                }

                else if(coun>3)

                {

                    //cout<<"i=="<<i<<endl;

                    //cout<<"coun="<<coun<<endl;

                    //cout<<"ceshi"<<endl;

                    s[start]='9';

                    s.erase(start+1,coun-1);

                    len-=coun-1;

                    i-=coun;

                    coun=0;

                    //cout<<"i="<<i<<endl;

                    //cout<<"len-"<<len<<endl;

                    //i--;

                }

                coun=0;

            }

        }

        //cout<<i<<endl;

        //cout<<coun<<endl;

        //cout<<len<<endl;

       // cout<<start<<endl;

       // cout<<s<<endl;

        if(coun>9)

        {

            s[start]='2';

            s[start+1]='7';

            s.erase(start+2,coun-2);

            coun=0;

        }

        else if(coun>3)

        {

            //cout<<"ceshi"<<endl;

            s[start]='9';

            s.erase(start+1,coun-1);

            coun=0;

        }

        cout<<s<<endl;

        return 0;

    }

    6:

    水题,纯模拟,代码:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    int main()

    {

        int n,i,j,k,a[100],b[100];

        string s[100];

        cin>>n;

        for(i=0;i<n;i++)

        {

            cin>>a[i]>>s[i];

            b[i]=1;

        }

        for(i=0;i<n;i++)

        {

            if(b[i]==1)

            {

                for(j=n-1;j>=0;j--)

                {

                    if(b[j]==1&&a[j]!=a[i])

                    {

                        cout<<s[i]<<' '<<s[j]<<endl;

                        b[i]=0;

                        b[j]=0;

                        break;

                    }

                }

            }

        }

        return 0;

    }

    7:

    模拟,代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    int main()

    {

       int n,i,j,k;

       float h,w;

       cin>>n;

       while(n--)

       {

           cin>>h>>w;

           float standnard=(h-100)*0.9;

           w/=2;

           if(abs(w-standnard)<standnard*0.1)

           {

               cout<<"You are wan mei!"<<endl;

           }

           else if(w>standnard)

           {

               cout<<"You are tai pang le!"<<endl;

           }

           else

           {

               cout<<"You are tai shou le!"<<endl;

           }

       }

        return 0;

    }

    8:

    都是这种题就好了

    代码:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    int main()

    {

       cout<<"This is a simple problem."<<endl;

        return 0;

    }

    9:

    水题,结构体排序+模拟:

    思路:

    先存入每一位同学的信息,然后按照题目要求进行结构体排序,最后进行输出。输出的时候需要注意如果这一位同学与上一位同学的分数一样,则排名不需要更新,反之,更新排名至i+i。

    代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    struct student

    {

        int score;

        string name;

    };

    bool cmp(student i,student j)

    {

        if(i.score==j.score)

        {

            return i.name<j.name;

        }

        return i.score>j.score;

    }

    int main()

    {

        student stu[10000+8];

        int n,i,j,k;

        string s;

        int g;

        cin>>n>>g>>k;

        int sum=0;

        for(i=0;i<n;i++)

        {

            cin>>stu[i].name>>stu[i].score;

            if(stu[i].score>=60&&stu[i].score<g)

            {

                sum+=20;

            }

            else if(stu[i].score>=g&&stu[i].score<=100)

            {

                sum+=50;

            }

        }

        sort(stu,stu+n,cmp);

        int coun=1;

        cout<<sum<<endl;

        for(i=0;i<k;i++)

        {

                if(i!=0&&stu[i].score==stu[i-1].score)

                {

                    ;

                }

                else if(i!=0&&stu[i].score!=stu[i-1].score)

                {

                    coun=i+1;

                }

                cout<<coun<<' '<<stu[i].name<<' '<<stu[i].score<<endl;

        }

         while(stu[i].score==stu[i-1].score)

        {

             cout<<coun<<' '<<stu[i].name<<' '<<stu[i].score<<endl;

             i++;

            

        }

        return 0;

    }

    10:

    一个写崩了的模拟题。

    思路:

    存储链表,然后遍历,没必要在开一个新的链表,直接把删除的元素的下一个地址更改就行了。需要注意的是如果该节点删除,那么上一个节点不会发生变化。

    代码如下:
    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    const int Max=1e5+8;

    int start=0;

    int head=-2;

    int n;

    struct lis

    {

        int num;

        int next=-1;

    };

    bool vis[Max];

    int main()

    {

        lis a[Max];

        int i,j,k,t;

        int xia;

        cin>>start>>n;

        int num=0;

        for(i=0;i<n;i++)

        {

            cin>>k;

            cin>>a[k].num>>a[k].next;

        }

        for(i=start,j=-1;i!=-1;)

        {

            xia=a[i].next;

            int key=abs(a[i].num);

            //cout<<"-----------------"<<i<<endl;

            if(vis[key]==1)

            {

                if(head==-2)

                {

                    head=i;

                    t=head;

                    //a[t].num=a[i].num;

                    a[t].next=-1;

                }

                else

                {

                    a[t].next=i;

                    t=i;

                    a[t].next=-1;

                    //a[t].num=a[i].num;

                }

                a[j].next=xia;

            }

            else

            {

                //h.insert(abs(a[i].num));

                vis[key]=1;

                j=i;

            }

            i=xia;

        }

        for(i=start;i!=-1;i=a[i].next)

        {

            printf("%05d %d ",i,a[i].num);

            if(a[i].next==-1)

            {

                printf("-1 ");

            }

            else

            {

                printf("%05d ",a[i].next);

            }

        }

        for(i=head;i!=-1;i=a[i].next)

        {

            printf("%05d %d ",i,a[i].num);

            if(a[i].next==-1)

            {

                printf("-1 ");

            }

            else

            {

                printf("%05d ",a[i].next);

            }

        }

        return 0;

    }

    12题:

    模拟,结构体存储月饼的总量、总价格,单价,根据单价结构体排序,模拟,输出结果即可。

    代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    struct moon

    {

        float unit,price,num;

    };

    bool cmp(moon i,moon j)

    {

        return i.unit>j.unit;

    }

    int main()

    {

        int n,i,j,k;

        cin>>n;

        float d;

        cin>>d;

        moon cake[2000];

        for(i=0;i<n;i++)

        {

            cin>>cake[i].num;

        }

        for(i=0;i<n;i++)

        {

            cin>>cake[i].price;

            cake[i].unit=cake[i].price/cake[i].num;

        }

        sort(cake,cake+n,cmp);

        float ans=0;

        for(i=0;i<n;i++)

        {

            if(d>=cake[i].num)

            {

                //cout<<cake[i].num<<endl;

                ans+=cake[i].price;

                d-=cake[i].num;

            }

            else

            {

                ans+=d*cake[i].unit;

                break;

            }

        }

        cout<<fixed<<setprecision(2)<<ans<<endl;

        return 0;

    }

  • 相关阅读:
    Daily Scrum
    Daily Scrum
    Daily Scrum
    Daily Scrum
    Daily Scrum
    bing背单词交互流程
    立会2015-11-23
    每日例会11.16
    每日立会2015-11-11
    单词挑战设计0.1
  • 原文地址:https://www.cnblogs.com/chengxvzhishen/p/13837552.html
Copyright © 2011-2022 走看看