69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct student {
long int N;//准考证号
int s1;//德
int s2;//才
int s;//总分
} STU;
void sort(STU s2[],int l,int r) {
int i,j;
for(i=l; i<=r; i++) {
int t=i;
for(j=i+1; j<=r; j++) {
if(s2[j].s>s2[t].s || s2[j].s==s2[t].s && s2[j].s1>s2[t].s1 || s2[j].s==s2[t].s&&s2[j].s1==s2[t].s1&&s2[j].N<s2[t].N ) { //修改点1
t=j;
}
}
if(t!=i) {
STU T=s2[i];
s2[i]=s2[t];
s2[t]=T;
}
}
}
int main(int argc, char *argv[]) {
int n,l,h;
scanf("%d%d%d",&n,&l,&h);
int i,j;
STU s[100001];//<===修改点2
for(i=0; i<n; i++) { //输入学号德才总分
scanf("%ld",&s[i].N);
scanf("%d%d",&s[i].s1,&s[i].s2);
s[i].s= s[i].s1+s[i].s2;
}
int k=0;
STU s2[100001];
for(i=0; i<n; i++) { //存储第一类考生
if(s[i].s1>=h &&s[i].s2>=h) //修改点3
s2[k++]=s[i];
}
int d1=k-1;//记录最后一个第一类考生的下标
for(i=0; i<n; i++) { //存储第二类考生
if(s[i].s1>=h&&s[i].s2<h&&s[i].s2>=l) //修改点4
s2[k++]=s[i];
}
int d2=k-1;//记录最后一个第二类考生的下标
for(i=0; i<n; i++) { //存储第三类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1>=s[i].s2) //修改点5
s2[k++]=s[i];
}
int d3=k-1;//记录最后一个第三类考生的下标
for(i=0; i<n; i++) { //第四类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1<s[i].s2)//修改点6
s2[k++]=s[i];
}
int d4=k-1;////记录最后一个第四类考生的下标
printf("%d\n",k);
sort(s2,0,d1);
sort(s2,d1+1,d2);
sort(s2,d2+1,d3);
sort(s2,d3+1,d4);
for(i=0; i<k; i++) {
printf("%ld %d %d\n",s2[i].N,s2[i].s1,s2[i].s2);
}
}
[/quote]解决了,
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct student {
long int N;//准考证号
int s1;//德
int s2;//才
int s;//总分
} STU;
void sort(STU s2[],int l,int r) {
int i,j;
for(i=l; i<=r; i++) {
int t=i;
for(j=i+1; j<=r; j++) {
if(s2[j].s>s2[t].s || s2[j].s==s2[t].s && s2[j].s1>s2[t].s1 || s2[j].s==s2[t].s&&s2[j].s1==s2[t].s1&&s2[j].N<s2[t].N ) { //修改点1
t=j;
}
}
if(t!=i) {
STU T=s2[i];
s2[i]=s2[t];
s2[t]=T;
}
}
}
int main(int argc, char *argv[]) {
int n,l,h;
scanf("%d%d%d",&n,&l,&h);
int i,j;
STU s[100001];//<===修改点2
for(i=0; i<n; i++) { //输入学号德才总分
scanf("%ld",&s[i].N);
scanf("%d%d",&s[i].s1,&s[i].s2);
s[i].s= s[i].s1+s[i].s2;
}
int k=0;
STU s2[100001];
for(i=0; i<n; i++) { //存储第一类考生
if(s[i].s1>=h &&s[i].s2>=h) //修改点3
s2[k++]=s[i];
}
int d1=k-1;//记录最后一个第一类考生的下标
for(i=0; i<n; i++) { //存储第二类考生
if(s[i].s1>=h&&s[i].s2<h&&s[i].s2>=l) //修改点4
s2[k++]=s[i];
}
int d2=k-1;//记录最后一个第二类考生的下标
for(i=0; i<n; i++) { //存储第三类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1>=s[i].s2) //修改点5
s2[k++]=s[i];
}
int d3=k-1;//记录最后一个第三类考生的下标
for(i=0; i<n; i++) { //第四类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1<s[i].s2)//修改点6
s2[k++]=s[i];
}
int d4=k-1;////记录最后一个第四类考生的下标
printf("%d\n",k);
sort(s2,0,d1);
sort(s2,d1+1,d2);
sort(s2,d2+1,d3);
sort(s2,d3+1,d4);
for(i=0; i<k; i++) {
printf("%ld %d %d\n",s2[i].N,s2[i].s1,s2[i].s2);
}
}
[/quote]
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct student {
long int N;//准考证号
int s1;//德
int s2;//才
int s;//总分
} STU;
void sort(STU s2[],int l,int r) {
int i,j;
for(i=l; i<=r; i++) {
int t=i;
for(j=i+1; j<=r; j++) {
if(s2[j].s>s2[t].s || s2[j].s==s2[t].s && s2[j].s1>s2[t].s1 || s2[j].s==s2[t].s&&s2[j].s1==s2[t].s1&&s2[j].N<s2[t].N ) { //修改点1
t=j;
}
}
if(t!=i) {
STU T=s2[i];
s2[i]=s2[t];
s2[t]=T;
}
}
}
int main(int argc, char *argv[]) {
int n,l,h;
scanf("%d%d%d",&n,&l,&h);
int i,j;
STU s[100001];//<===修改点2
for(i=0; i<n; i++) { //输入学号德才总分
scanf("%ld",&s[i].N);
scanf("%d%d",&s[i].s1,&s[i].s2);
s[i].s= s[i].s1+s[i].s2;
}
int k=0;
STU s2[100001];
for(i=0; i<n; i++) { //存储第一类考生
if(s[i].s1>=h &&s[i].s2>=h) //修改点3
s2[k++]=s[i];
}
int d1=k-1;//记录最后一个第一类考生的下标
for(i=0; i<n; i++) { //存储第二类考生
if(s[i].s1>=h&&s[i].s2<h&&s[i].s2>=l) //修改点4
s2[k++]=s[i];
}
int d2=k-1;//记录最后一个第二类考生的下标
for(i=0; i<n; i++) { //存储第三类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1>=s[i].s2) //修改点5
s2[k++]=s[i];
}
int d3=k-1;//记录最后一个第三类考生的下标
for(i=0; i<n; i++) { //第四类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1<s[i].s2)//修改点6
s2[k++]=s[i];
}
int d4=k-1;////记录最后一个第四类考生的下标
printf("%d\n",k);
sort(s2,0,d1);
sort(s2,d1+1,d2);
sort(s2,d2+1,d3);
sort(s2,d3+1,d4);
for(i=0; i<k; i++) {
printf("%ld %d %d\n",s2[i].N,s2[i].s1,s2[i].s2);
}
}
[/quote]通过了,谢谢老哥的帮忙,下次我一定自己注意。
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct student {
long int N;//准考证号
int s1;//德
int s2;//才
int s;//总分
} STU;
void sort(STU s2[],int l,int r) {
int i,j;
for(i=l; i<=r; i++) {
int t=i;
for(j=i+1; j<=r; j++) {
if(s2[j].s>s2[t].s || s2[j].s==s2[t].s && s2[j].s1>s2[t].s1 || s2[j].s==s2[t].s&&s2[j].s1==s2[t].s1&&s2[j].N<s2[t].N ) { //修改点1
t=j;
}
}
if(t!=i) {
STU T=s2[i];
s2[i]=s2[t];
s2[t]=T;
}
}
}
int main(int argc, char *argv[]) {
int n,l,h;
scanf("%d%d%d",&n,&l,&h);
int i,j;
STU s[100001];//<===修改点2
for(i=0; i<n; i++) { //输入学号德才总分
scanf("%ld",&s[i].N);
scanf("%d%d",&s[i].s1,&s[i].s2);
s[i].s= s[i].s1+s[i].s2;
}
int k=0;
STU s2[100001];
for(i=0; i<n; i++) { //存储第一类考生
if(s[i].s1>=h &&s[i].s2>=h) //修改点3
s2[k++]=s[i];
}
int d1=k-1;//记录最后一个第一类考生的下标
for(i=0; i<n; i++) { //存储第二类考生
if(s[i].s1>=h&&s[i].s2<h&&s[i].s2>=l) //修改点4
s2[k++]=s[i];
}
int d2=k-1;//记录最后一个第二类考生的下标
for(i=0; i<n; i++) { //存储第三类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1>=s[i].s2) //修改点5
s2[k++]=s[i];
}
int d3=k-1;//记录最后一个第三类考生的下标
for(i=0; i<n; i++) { //第四类考生
if(s[i].s1<h&&s[i].s1>=l&&s[i].s2>=l&&s[i].s1<s[i].s2)//修改点6
s2[k++]=s[i];
}
int d4=k-1;////记录最后一个第四类考生的下标
printf("%d\n",k);
sort(s2,0,d1);
sort(s2,d1+1,d2);
sort(s2,d2+1,d3);
sort(s2,d3+1,d4);
for(i=0; i<k; i++) {
printf("%ld %d %d\n",s2[i].N,s2[i].s1,s2[i].s2);
}
}
if(s2[j].s!=s2[t].s ) { //总分不相等时,按总分判断
if(s2[j].s>s2[t].s)
t=j;
} else { // 总分相等
if(s2[j].s1!=s2[t].s1) { //但德 分数不同,根据 德 判断
if(s2[j].s1>s2[t].s1)
t=j;
} else { //总分、德 也相同,根据学号判断
if(s2[j].N<s2[t].N)
t=j;
}
}
#include <stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define BOOL int
typedef struct _student {
int id;//准考证号
int de;//德
int cai;//才
int level; //等级
} student;
//排序比较函数 ,s1>s2 返回TRUE 其它返回FALSE
BOOL cmp(student * s1, student *s2 ) {
int sum1,sum2;
//计算总分
sum1=s1->de+s1->cai;
sum2=s2->de+s2->cai;
if (s1->level != s2->level) //1:比较等级
return s1->level > s2->level;
if (sum1 < sum2) { //2:等级相同,比较总分
return FALSE;
} else if (sum1 > sum2) {
return TRUE;
} else { //3:总分相同,比较德
if (s1->de < s2->de) {
return FALSE;
} else if (s1->de > s2->de) {
return TRUE;
} else { //4:德也相同,比较id
if (s1->id < s2->id) {
return TRUE;
} else {
return FALSE;
}
}
}
}
//快速排序
void qsort(student stu[], int low,int high) {
int i,j;
student temp;
if(low<high) {
i=low,j=high,temp=stu[i];
while(i<j) {
while(i<j&&!cmp(&stu[j],&temp))
j--;
if(i<j) {
stu[i]=stu[j];
i++;
}
while(i<j&&cmp(&stu[i],&temp))
++i;
if(i<j) {
stu[j]=stu[i];
j--;
}
}
stu[i]=temp;
qsort(stu,low,i-1);
qsort(stu,i+1,high);
}
return;
}
int main() {
int n, l, h;
int i, j;
student stu[100000];
int count = 0; //符合最低标准人数
scanf("%d%d%d", &n, &l, &h);
for (i = 0; i < n; i++) { //输入学号德才总分
scanf("%ld", &stu[i].id);
scanf("%d%d", &stu[i].de, &stu[i].cai);
}
//按标准进行分类,并统计符合标准的人数。
for (i = 0; i < n; i++) {
if (stu[i].de >= h && stu[i].cai >= h) j=5;
else if (stu[i].de >= h && stu[i].cai >= l) j = 4;
else if (stu[i].de >= l && stu[i].cai >= l && stu[i].de >= stu[i].cai) j = 3;
else if (stu[i].de >= l && stu[i].cai >= l) j = 2;
else j=1;
stu[i].level = j;
if (j > 1) count++;
}
qsort(stu,0,n-1); //快速排序
printf("%d\n", count );
for (i = 0; i < count; i++) {
printf("%ld %d %d\n", stu[i].id, stu[i].de, stu[i].cai);
}
return 0;
}