请大佬帮我研究一下
查看原帖
请大佬帮我研究一下
392935
qzhwDGS楼主2021/8/23 19:48

磕了三个小时的题


代码:

#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);
	}
}
2021/8/23 19:48
加载中...