文章

9

粉丝

101

获赞

0

访问

5.9k

头像
EXCEL排序 题解:通过率只有75%,求大佬帮忙看一下哪里出问题了
P1338 浙江大学机试题
发布于2024年3月12日 21:43
阅读数 651

#include<bits/stdc++.h>
using namespace std;
 struct Student{
    int id;
    char name[5000];
    int score;
};


int cmp1(Student a,Student b){
return a.id<b.id;    
}
int cmp2(Student a,Student b){
if(a.name==b.name)return a.id<b.id;
            return a.name<b.name;
    
}

int cmp3(Student a,Student b){
if(a.score==b.score)return a.id<b.id;
            return a.score<b.score;    
    
}

int main(){
    int n,c;
    Student *stu;
    while (cin>>n>>c){
    if(n==0)break;
        stu=new Student[n];
        for(int i=0;i<n;i++){
            cin>>stu...

登录查看完整内容


登录后发布评论

5 条评论
vanffer
2024年5月30日 21:42

请教一下,我这个为啥也是只有75%啊?

#include<bits/stdc++.h>
using namespace std;

typedef struct student{
	int id;
	string name;
	int grade;
}Stu;

int main(){
	int n, c;
	while(cin >> n){
		if(n == 0) break;
		cin >> c;
		Stu *ss = new Stu[n];
		for(int i = 0; i < n; ++i) cin >> ss[i].id >> ss[i].name >> ss[i].grade;
		if(c == 1) sort(ss, ss + n, 
					   [](Stu s1, Stu s2)->bool{
					   		return s1.id < s2.id;
					   });
		else if(c == 2) sort(ss, ss + n, 
							[](Stu s1, Stu s2)->bool{
								int res = s1.name.compare(s2.name);
								if(res == 0) return s1.id < s2.id;
								return res == -1;
							});
		else if(c == 3) sort(ss, ss + n,
							[](Stu s1, Stu s2)->bool{
								if(s1.grade == s2.grade){
									return s1.id < s2.id;
								}
								return s1.grade < s2.grade;
							});
		printf("Case:\n");
		for(int i = 0; i < n; ++i) printf("%06d %s %d\n", ss[i].id, ss[i].name.c_str(), ss[i].grade);
		delete[] ss;
	}
	return 0;
}

 

赞(1)

snake : 回复 vanffer: 把return res == -1;改为return res < 0;

2024年5月30日 22:17

vanffer : 回复 snake: 嗷嗷是的,谢谢您!

2024年5月31日 13:56
snake VIP
2024年3月12日 22:19

char数组的字符串不能直接比大小,string类型才能直接比,这个要用strcmp函数

赞(2)

18237466773 : 回复 snake: 谢谢大佬,解决了

2024年3月12日 22:37