A题 小中大
100分 AC代码:
#include <bits/stdc++.h>
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题 二十四点
乘除法的优先级大于加减法,先算乘除法。这题比较坑的就是有64种情况,直接暴力枚举,代码略长…
100分 AC代码:
#include <bits/stdc++.h>
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题 中间数
100分 AC代码:
#include <bits/stdc++.h>
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题 工资计算
数据保证税前工资s为整百数,枚举s即可。
100分 AC代码:
#include <bits/stdc++.h>
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;
}