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

cjl1166 2013-04-08 11:31:17



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;}
}}}
...全文
1610 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
b_end_an 2013-04-11
  • 打赏
  • 举报
回复
#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;
	}
}
v2psv 2013-04-09
  • 打赏
  • 举报
回复

struct Student
{
   char a[12];
   int num;
};
Carl_CCC 2013-04-09
  • 打赏
  • 举报
回复
首先的你定义有问题,你应该吧 int a[12];定义成char 然后呢比较这两个不能使用 stu[j].a<stu[k].a C语言没这个功能,你应该用strcmp

33,320

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧