尝试了讨论区帖子的样例是对的,想问下是哪里写错了,或者有其他样例吗。(讨论区找到的样例放最后了)
#include<stdio.h>
#include <string.h>
#define MAX_LEN 120
struct data{
char name[40],position[10];
long long banggong;
int level;
};
struct data bang[120];
int main()
{
int num = 0,num1=0,temp=0,s=0,temp1=0,banggong[120],level[120],BossNum=0,PositionNum[10]={0},InputNumber[120]={0};
scanf("%d",&num);
for(int i = 0;i < num;i++)
{
scanf("%s",&bang[i].name);
scanf("%s",&bang[i].position);
scanf("%lld",&bang[i].banggong);
scanf("%d",&bang[i].level);
//scanf("%s,%s,%d,%d",&bang[i].name,&bang[i].position,&bang[i].banggong,&bang[i].level);
}
for (int i = 0; i < num; i++)
{
InputNumber[i]=i;
}
BossNum = 3;//不用排的帮主和副帮主
PositionNum[0]=2;
PositionNum[1]=4;
PositionNum[2]=7;
PositionNum[3]=25;
if(num-41>0)//帮众数
{
PositionNum[4]=num-41;
}
//排帮贡
for (int i = 0; i < num-BossNum; i++)//从BossNum开始排因为,前几个不用排
{
for(int x = BossNum;x < num-i;x++)
{
if(bang[x].banggong<bang[x+1].banggong)//排帮贡
{
temp=bang[x+1].banggong;
bang[x+1].banggong=bang[x].banggong;
bang[x].banggong=temp;//换帮贡
temp=bang[x+1].level;
bang[x+1].level=bang[x].level;
bang[x].level=temp;//换等级
strcpy(bang[119].name,bang[x+1].name);
strcpy(bang[x+1].name,bang[x].name);
strcpy(bang[x].name,bang[119].name);//换名字
temp=InputNumber[x+1];
InputNumber[x+1]=InputNumber[x];
InputNumber[x]=temp;//换输入顺序
}
}
}
//排等级
for(int i = 0; i < 5; i++)
{
for (int j = 1; j < PositionNum[i]-1; j++)
{
for(int x = BossNum;x < BossNum+PositionNum[i]-j;x++)
{
if((bang[x].level<bang[x+1].level) && (x<num-1))//排等级
{
temp=bang[x+1].level;
bang[x+1].level=bang[x].level;
bang[x].level=temp;//换等级
temp=bang[x+1].banggong;
bang[x+1].banggong=bang[x].banggong;
bang[x].banggong=temp;//换帮贡
strcpy(bang[119].name,bang[x+1].name);
strcpy(bang[x+1].name,bang[x].name);
strcpy(bang[x].name,bang[119].name);//换名字
temp=InputNumber[x+1];
InputNumber[x+1]=InputNumber[x];
InputNumber[x]=temp;//换输入顺序
}
}
}
BossNum=BossNum+PositionNum[i];
}
//排输入顺序
BossNum=3;
for (int i = 0; i < num-BossNum; i++)//从BossNum开始排因为,前几个不用排
{
for(int x = BossNum;x < num-i-1;x++)
{
if((bang[x].level == bang[x+1].level)&&(InputNumber[x] > InputNumber[x+1]))//排帮贡 (bang[x].banggong == bang[x+1].banggong)&&
{
temp=bang[x+1].banggong;
bang[x+1].banggong=bang[x].banggong;
bang[x].banggong=temp;//换帮贡
temp=bang[x+1].level;
bang[x+1].level=bang[x].level;
bang[x].level=temp;//换等级
temp=InputNumber[x+1];
InputNumber[x+1]=InputNumber[x];
InputNumber[x]=temp;//换输入顺序
strcpy(bang[119].name,bang[x+1].name);
strcpy(bang[x+1].name,bang[x].name);
strcpy(bang[x].name,bang[119].name);//换名字
}
}
}
strcpy(bang[0].position,"BangZhu");
strcpy(bang[1].position,"FuBangZhu");
strcpy(bang[2].position,"HuFa");
strcpy(bang[3].position,"ZhangLao");
strcpy(bang[4].position,"TangZhu");
strcpy(bang[5].position,"JingYing");
strcpy(bang[6].position,"BangZhong");
for(int i=0;i<num;i++)//打印值
{
//printf("%s",bang[i].name);//打印名字
//printf("%s",bang[i].position);//打印职位
//printf("%d",bang[i].level);//打印等级
if(i == 0)//帮主
{
s=0;
}
else if(i<2)//副帮主
{
s=1;
}
printf("%s %s %d",bang[i].name,bang[s].position,bang[i].level);//打印等级
if(i!=num)
{
printf("\n");
}
if(i==2)
{
s=2;
}
if(i>=2)
{
if(temp1>=PositionNum[s-2])
{
s++;
if(s>6)//帮众
{
s=6;
}
temp1=0;
}
temp1++;
}
}
return 0;
}```
样例:
50
1 BangZhu 10000 99
2 FuBangZhu 10000 98
3 FuBangZhu 10000 97
4 a 14651 165
5 b 656658 2655
6 a 2652 2652
7 a 2162812 5265
8 a 56412 568
9 a 13215 32
10 a 156841 628
11 a 265852 8596
12 a 468 2652
13 a 654681 26589
14 a 78152 5215
15 a 2456 256
16 b 1482 2456
17 b 156658 6515
18 b 1545644 11556
19 b 1565489 1665
20 b 1616 151
21 c 16156 1148
22 c 645456 654
23 c 6456 465
24 c 44454 65454
25 c 4544646 46445
26 c 4445645 15654
27 d 16456 4646
28 d 44646 46456
29 d 465665 6468
30 d 5656 64
31 d 56566 62
32 d 5666 68
33 d 556 65
34 d 6 62
35 d 0 69
36 d 9 67
37 d 0 1
38 d 78 0
39 d 25 12
40 d 56576 33
41 d 56506 49
42 d 656 75
43 d 56576 9
44 d 56356 98
45 d 569556 78
46 d 565756 50
47 d 56156 65
48 d 565406 45
49 d 56856 98
50 d 753 95
输出数据:
1 BangZhu 99
2 FuBangZhu 98
3 FuBangZhu 97
25 HuFa 46445
26 HuFa 15654
18 ZhangLao 11556
7 ZhangLao 5265
5 ZhangLao 2655
19 ZhangLao 1665
13 TangZhu 26589
11 TangZhu 8596
29 TangZhu 6468
22 TangZhu 654
45 TangZhu 78
46 TangZhu 50
48 TangZhu 45
24 JingYing 65454
28 JingYing 46456
17 JingYing 6515
14 JingYing 5215
27 JingYing 4646
6 JingYing 2652
16 JingYing 2456
21 JingYing 1148
10 JingYing 628
8 JingYing 568
23 JingYing 465
15 JingYing 256
4 JingYing 165
20 JingYing 151
44 JingYing 98
49 JingYing 98
50 JingYing 95
32 JingYing 68
47 JingYing 65
30 JingYing 64
31 JingYing 62
41 JingYing 49
40 JingYing 33
9 JingYing 32
43 JingYing 9
12 BangZhong 2652
42 BangZhong 75
35 BangZhong 69
36 BangZhong 67
33 BangZhong 65
34 BangZhong 62
39 BangZhong 12
37 BangZhong 1
38 BangZhong 0