CSP认证-第一次培训(2019.9.4)

A题 小中大

CSP认证-第一次培训(2019.9.4)_第1张图片
CSP认证-第一次培训(2019.9.4)_第2张图片
100分 AC代码:

#include 
using namespace std;
const int N=1e5+10;
double mid1;
int n,mx,mi,mid2,a[N];
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n)
    {
        mi=0x3f3f3f3f;mx=-mi;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            mx=max(mx,a[i]);
            mi=min(mi,a[i]);
        }
        sort(a+1,a+n+1);
        printf("%d ",mx);
        if(n%2==0)
        {
            mid1=(1.0*a[n/2]+1.0*a[n/2+1])/2;
            mid2=(a[n/2]+a[n/2+1])/2;
            if(mid1==mid2)printf("%d ",mid2);
            else printf("%.1lf ",mid1);
        }
        else
        {
            mid2=a[(n+1)/2];
            printf("%d ",mid2);
        }
        printf("%d\n",mi);
    }
    return 0;
}

B题 二十四点

CSP认证-第一次培训(2019.9.4)_第3张图片
CSP认证-第一次培训(2019.9.4)_第4张图片
乘除法的优先级大于加减法,先算乘除法。这题比较坑的就是有64种情况,直接暴力枚举,代码略长…

100分 AC代码:

#include 
using namespace std;
string a;
int n,s,ans,tmp1,tmp2,vis[10];
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        s=0;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<7;i++)
        {
            if(i%2==0)a[i]=a[i]-'0';//把数字位变成int类型
            else
            {
                if(a[i]=='x'||a[i]=='/')
                {
                    s++;//乘除号的个数
                    vis[i]=1;//标记乘除号
                }
            }
        }
        ans=0;tmp1=tmp2=0;
        if(s==3)
        {
            if(a[1]=='x')ans=a[0]*a[2];
            else ans=a[0]/a[2];
            if(a[3]=='x')ans=ans*a[4];
            else ans=ans/a[4];
            if(a[5]=='x')ans=ans*a[6];
            else ans=ans/a[6];
        }
        else if(s==2)
        {
            if(vis[5]==0)
            {
                if(a[1]=='x')ans=a[0]*a[2];
                else ans=a[0]/a[2];
                if(a[3]=='x')ans=ans*a[4];
                else ans=ans/a[4];
                if(a[5]=='+')ans=ans+a[6];
                else ans=ans-a[6];
            }
            else if(vis[3]==0)
            {
                if(a[1]=='x')tmp1=a[0]*a[2];
                else ans=a[0]/a[2];
                if(a[5]=='x')tmp2=a[4]*a[6];
                else tmp2=a[4]/a[6];
                if(a[3]=='+')ans=tmp1+tmp2;
                else ans=tmp1-tmp2;
            }
            else
            {
                if(a[3]=='x')ans=a[2]*a[4];
                else ans=a[2]/a[4];
                if(a[5]=='x')ans=ans*a[6];
                else ans=ans/a[6];
                if(a[1]=='+')ans=a[0]+ans;
                else ans=a[0]-ans;
            }
        }
        else if(s==1)
        {
            if(vis[1]==1)
            {
                if(a[1]=='x')ans=a[0]*a[2];
                else ans=a[0]/a[2];
                if(a[3]=='+')ans=ans+a[4];
                else ans=ans-a[4];
                if(a[5]=='+')ans=ans+a[6];
                else ans=ans-a[6];
            }
            else if(vis[3]==1)
            {
                if(a[3]=='x')ans=a[2]*a[4];
                else ans=a[2]/a[4];
                if(a[1]=='+')ans=a[0]+ans;
                else ans=a[0]-ans;
                if(a[5]=='+')ans=ans+a[6];
                else ans=ans-a[6];
            }
            else
            {
                if(a[5]=='x')tmp1=a[4]*a[6];
                else tmp1=a[4]/a[6];
                if(a[1]=='+')ans=a[0]+a[2];
                else ans=a[0]-a[2];
                if(a[3]=='+')ans=ans+tmp1;
                else ans=ans-tmp1;
            }
        }
        else
        {
            if(a[1]=='+')ans=a[0]+a[2];
            else ans=a[0]-a[2];
            if(a[3]=='+')ans+=a[4];
            else ans-=a[4];
            if(a[5]=='+')ans+=a[6];
            else ans-=a[6];
        }
        if(ans==24)printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

C题 中间数

CSP认证-第一次培训(2019.9.4)_第5张图片
CSP认证-第一次培训(2019.9.4)_第6张图片
100分 AC代码:

#include 
using namespace std;
int n,s1,s2,a[1100],ans;
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    ans=-1;
    for(int i=1;i<=n;i++)
    {
        s1=s2=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j]>a[i])s1++;
            else if(a[j]<a[i])s2++;
        }
        if(s1==s2){ans=a[i];break;}
    }
    printf("%d\n",ans);
    return 0;
}

D题 工资计算

CSP认证-第一次培训(2019.9.4)_第7张图片
数据保证税前工资s为整百数,枚举s即可。

100分 AC代码:

#include 
using namespace std;
int t,a,s,tax;
int main()
{
    ios::sync_with_stdio(false);
    cin>>t;
    if(t<=3500){printf("%d\n",t);return 0;}//3500以下不交税,税前税后相等
    for(s=3600;;s+=100)
    {
        a=s-3500;
        if(a<=1500)tax=a*0.03;
        else if(a>1500&&a<=4500)tax=1500*0.03+(a-1500)*0.1;
        else if(a>4500&&a<=9000)tax=1500*0.03+3000*0.1+(a-4500)*0.2;
        else if(a>9000&&a<=35000)tax=1500*0.03+3000*0.1+4500*0.2+(a-9000)*0.25;
        else if(a>35000&&a<=55000)tax=1500*0.03+3000*0.1+4500*0.2+26000*0.25+(a-35000)*0.3;
        else if(a>55000&&a<=80000)tax=1500*0.03+3000*0.1+4500*0.2+26000*0.25+20000*0.3+(a-55000)*0.35;
        else tax=tax=1500*0.03+3000*0.1+4500*0.2+26000*0.25+20000*0.3+25000*0.35+(a-80000)*0.45;
        if(s-tax==t){printf("%d\n",s);break;}
    }
    return 0;
}

你可能感兴趣的:(ACM-基础算法/STL)