用二维数组做的,犯的错误有:
1.换位置的时候只换了成绩而没有换学号,需要全换【这样看,就不如用结构体】
2.数据类型,范围。long->lf,long long->llf
3.数组大小,后面一旦涉及,切记从0开始
/*
5
10002130201 90
10002130230 80
10002130231 85
10002130148 48
10002130167 90
*/
//鍏ㄦ崲
//鏁版嵁绫诲瀷锛岃寖鍥?
#include <stdio.h>
#include <stdlib.h>
int main()
{//泄袛褏袣
int i,j,n;
scanf("%d",&n);
long long stu[n][2];
for(i=0;i<n;i++){
for(j=0;j<2;j++){
scanf("%lld",&stu[i][j]);
}
}
//械械锌袪
for(i=0;i<n-1;i++){
for(j=0;j<n-1;j++){
if(stu[j][1]<stu[j+1][1]){
long long temp0=stu[j][0];
stu[j][0]=stu[j+1][0];
stu[j+1][0]=temp0;
long long temp1=stu[j][1];
stu[j][1]=stu[j+1][1];
stu[j+1][1]=temp1;
}
if(stu[j][1]==stu[j+1][1]&&stu[j][0]>stu[j+1][0]){
long long tem0=stu[j][0];
stu[j][0]=stu[j+1][0];
stu[j+1][0]=tem0;
long long tem1=stu[j][1];
stu[j][1]=stu[j+1][1];
stu[j+1][1]=tem1;
}
}
}
//泄袛衼袞
for(i=0;i<n;i++){
if(stu[i][1]>=60)
printf("%lld %lld\n",stu[i][0],stu[i][1]);
}
}
结构体版本:
typedef struct{
long long int name;
int score;
}STU;
STU Stu[100];
int main(){
STU temp;
int n;
//输入n
scanf("%d",&n);
//输入学号,成绩
for(int i=0;i<n;i++)
scanf("%lld %d",&Stu[i].name,&Stu[i].score);
//排序
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(Stu[i].score<Stu[j].score){
temp=Stu[i];
Stu[i]=Stu[j];
Stu[j]=temp;
}
if(Stu[i].score==Stu[j].score){
if(Stu[i].name>Stu[j].name)
{
temp=Stu[i];
Stu[i]=Stu[j];
Stu[j]=temp;
}
}
}
}
for(int i=0;Stu[i].score>=60;i++)
printf("%lld %d\n",Stu[i].name,Stu[i].score);
}