读书人

有n(一≤n≤100)个学生的成绩记录

发布时间: 2013-04-20 19:43:01 作者: rapoo

有n(1≤n≤100)个学生的成绩记录,其中包含学号和成绩两项。按照成绩从高到低顺序输出成绩及格(≥60)学生的学号和成绩。成绩相同时按照学号从小到大顺序输出。



Input



第1行:输入一个整数n,表示学生记录数。

第2行 ~ n+1行:每行是学号(11位数字)及成绩(0到100之间的整数)。学号和成绩之间有一个空格。


Output



每行输出成绩及格学生按要求排序后以一个空格分隔的学号及成绩。


Sample Input

5
10002130201 90
10002130230 80
10002130231 85
10002130148 48
10002130167 90

Sample Output



10002130167 90
10002130201 90
10002130231 85
10002130230 80
#include<stdio.h>
struct Student
{
int a[12];
int num;
};
int main()
{
struct Student stu[101],temp;
int i,j,k,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d",stu[i].a,&stu[i].num);
}
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{if(stu[j].num>stu[k].num)
{k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;}
if(stu[j].num==stu[k].num)
{if(stu[j].a<stu[k].a){k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;}
}}}
for(i=0;i<n;i++)
{
if(stu[i].num>=60)
printf("%s %d\n",stu[i].a,stu[i].num);
}
return 0;
}为什么这段代码不起作用呢if(stu[j].num==stu[k].num)
{if(stu[j].a<stu[k].a){k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;}
}}} struct c
[解决办法]
首先的你定义有问题,你应该吧
int a[12];定义成char
然后呢比较这两个不能使用
stu[j].a<stu[k].a
C语言没这个功能,你应该用strcmp
[解决办法]


struct Student
{
char a[12];
int num;
};


[解决办法]
#include<iostream>
#include<map>
#include<set>
using namespace std;
int main()
{
map<int, set<int> > a;
int number, score;
while(cin >> number >> score)
{
a[score].insert(number);
}
for(map<int, set<int> >::reverse_iterator itermap = a.rbegin(); itermap!=a.rend(); ++ itermap)
{
if(itermap->first<60)
break;
for(set<int>::iterator iterset = itermap->second.begin(); iterset != itermap->second.end(); ++iterset)
cout << *iterset << " " << itermap->first << endl;
}
}

读书人网 >C++

热点推荐