关于结构体排序问题
  • 板块题目总版
  • 楼主wyz351244716
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/12/25 22:27
  • 上次更新2023/11/5 05:41:01
查看原帖
关于结构体排序问题
451473
wyz351244716楼主2020/12/25 22:27

P1786 帮贡排序,代码如下,实在想不到为什么只有60分,只过了6个ac,代码如下,有大佬能帮忙看一下吗,谢谢。

#include<stdio.h>
#include<string.h>
struct Bang{
	    int id;
		char name[50];
		char status[40];
		int bg;
		int order;
	}a[120];
void px(int l,int r){
	int i,j;
	int max_i;
	for(j=l;j<=r;j++){
		max_i=j;
      	for(i=j;i<=r;i++){
     		if(a[i].bg>a[max_i].bg)max_i=i;
     	}
     	a[0]=a[max_i];
     	for(i=max_i;i>j;i--){
     		a[i]=a[i-1];
    	}
    	a[j]=a[0];
    }
	
}
void px_s(int l,int r){
	int i,j;
	int max_i;
	for(j=l;j<=r;j++){
		max_i=j;
      	for(i=j;i<=r;i++){
     		if(a[i].id>a[max_i].id)max_i=i;
     	}
     	a[0]=a[max_i];
     	for(i=max_i;i>j;i--){
     		a[i]=a[i-1];
    	}
    	a[j]=a[0];
    }
	
}

void px_o(int l,int r){//按照等级排序 
	int i,j;
	int max_i;
	for(j=l;j<=r;j++){
		max_i=j;
      	for(i=j;i<=r;i++){
     		if(a[i].order>a[max_i].order)max_i=i;
     	}
     	a[0]=a[max_i];
     	for(i=max_i;i>j;i--){
     		a[i]=a[i-1];
    	}
    	a[j]=a[0];
    }
}
void auth(int l,int r,char *s){
	int i;
	for(i=l;i<=r;i++){
		strcpy(a[i].status,s);
	}
}
int main(){
	int i,n,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%s%s%d%d",&a[i].name,&a[i].status,&a[i].bg,&a[i].order);
		if(strcmp(a[i].status,"BangZhu")==0){
			a[i].id=7;
		}else if(strcmp(a[i].status,"FuBangZhu")==0){
			a[i].id=6;
		}else if(strcmp(a[i].status,"HuFa")==0){
			a[i].id=5;
		}else if(strcmp(a[i].status,"ZhangLao")==0){
			a[i].id=4;
		}else if(strcmp(a[i].status,"TangZhu")==0){
			a[i].id=3;
		}else if(strcmp(a[i].status,"JingYing")==0){
			a[i].id=2;
		}else if(strcmp(a[i].status,"BangZhong")==0){
			a[i].id=1;
		}
	}
    px_s(1,n);
	px(4,n);
	px_o(2,3);//副帮主排序 
	px_o(4,5);//护法排序 
	px_o(6,9);//长老排序
	px_o(10,16);//堂主排序
	px_o(17,41);//精英排序 
	px_o(42,n);//帮众排序 
    auth(4,5,"HuFa");
	auth(6,9,"ZhangLao");
	auth(10,16,"TangZhu");
	auth(17,41,"JingYing");
	auth(42,n,"BangZhong");
	for(i=1;i<=n;i++){
		printf("%s %s %d\n",a[i].name,a[i].status,a[i].order);
	}
	return 0;
} 


2020/12/25 22:27
加载中...