磕了三个小时的题
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct moni{
char name[33];
char zw[10];
int bg;
int dj;
int num;
}a[120];
int hf_total=2;
int zl_total=4;
int tz_total=7;
int jy_total=25;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",&a[i].name);
scanf("%s",&a[i].zw);
scanf("%d %d",&a[i].bg,&a[i].dj);
m=strlen(a[i].zw);
//a[i].num : 7是帮主,6是副帮主,5是护法,4是长老,3是堂主,2是精英,1是帮众
if(m==9)
{
if(a[i].zw[0]=='F') a[i].num=6;
else a[i].num=1;
}
if(m==8)
{
if(a[i].zw[0]=='J') a[i].num=2;
else a[i].num=4;
}
if(m==7)
{
if(a[i].zw[0]=='B') a[i].num=7;
else a[i].num=3;
}
if(m==4) a[i].num=5;
}
for(int i=n;i>=2;i--) // 冒泡排序 帮贡 ---- 原来用 sort 的
for(int j=1;j<=i-1;j++)
if(a[j+1].num!=7 && a[j+1].num!=6 && a[j].num!=7 && a[j].num!=6)
if(a[j+1].bg>a[j].bg)
swap(a[j+1],a[j]);
for(int i=1;i<=n;i++) // 确认职位
{
if(a[i].num!=7 && a[i].num!=6)
{
if(hf_total>0)
{
hf_total--;
a[i].num=5;
}
else if(hf_total==0)
{
if(zl_total>0)
{
a[i].num=4;
zl_total--;
}
else if(zl_total==0)
{
if(tz_total>0)
{
a[i].num=3;
tz_total--;
}
else if(tz_total==0)
{
if(jy_total>0)
{
a[i].num=2;
jy_total--;
}
else if(jy_total==0) a[i].num=1;
}
}
}
}
}
for(int i=n;i>=2;i--) // 按等级排序(冒泡)
for(int j=1;j<=i-1;j++)
{
if(a[j].num<a[j+1].num)
swap(a[j],a[j+1]);
else if(a[j].num==a[j+1].num)
if(a[j].dj<a[j+1].dj)
swap(a[j],a[j+1]);
}
for(int i=1;i<=n;i++)
{
printf("%s",a[i].name);
if(a[i].num==7) printf(" BangZhu ");
if(a[i].num==6) printf(" FuBangZhu ");
if(a[i].num==5) printf(" HuFa ");
if(a[i].num==4) printf(" ZhangLao ");
if(a[i].num==3) printf(" TangZhu ");
if(a[i].num==2) printf(" JingYing ");
if(a[i].num==1) printf(" BangZhong ");
printf("%d\n",a[i].dj);
}
}