题目如下:
PTA上提交结果的显示是这样的:
我的代码:
#include <stdio.h>
#include <string.h>
struct student{
char id[9];
int moral;
int intell;
int total;
};
void sort(struct student*arr,int n);
void swap(struct student*a,struct student*b);
int main()
{
int N,L,H;
scanf("%d%d%d",&N,&L,&H);
struct student stu[100];
int i=0;
int cnt=0;
for(i=0;i<N;i++){
scanf("%s %d %d",stu[i].id,&stu[i].moral,&stu[i].intell);
stu[i].total=stu[i].intell+stu[i].moral;
}
struct student A[N];
struct student B[N];
struct student C[N];
struct student D[N];
int cnt1=0;
int cnt2=0;
int cnt3=0;
int cnt4=0;
for(i=0;i<N;i++){
if(stu[i].moral>=L&&stu[i].intell>=L){
cnt++;
if(stu[i].moral>=H&&stu[i].intell>=H){
A[cnt1++]=stu[i];
}
else if(stu[i].intell<H&&stu[i].moral>=H){
B[cnt2++]=stu[i];
}
else if(stu[i].moral<H){
if(stu[i].moral>stu[i].intell) C[cnt3++]=stu[i];
else D[cnt4++]=stu[i];
}
}
}
printf("%d\n",cnt);
sort(A,cnt1);
sort(B,cnt2);
sort(C,cnt3);
sort(D,cnt4);
return 0;
}
void sort(struct student*arr,int n)
{
int i,j;
struct student tmp;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(arr[j].total<arr[j+1].total) swap(&arr[j],&arr[j+1]);
else if(arr[j].total==arr[j+1].total){
if(arr[j].moral<arr[j+1].moral) swap(&arr[j],&arr[j+1]);
else if(arr[j].moral==arr[j+1].moral){
if(strcmp(arr[j].id,arr[j+1].id)>0) swap(&arr[j],&arr[j+1]);
}
}
}
}
for(i=0;i<n;i++){
printf("%s %d %d\n",arr[i].id,arr[i].moral,arr[i].intell);
}
}
void swap(struct student*a,struct student*b)
{
struct student tmp=*a;
*a=*b;
*b=tmp;
}
感谢!
数组出现了栈溢出的情况,可能是系统栈区的内存不够用,所以提问者,需要将struct的单元内存大小进行缩减
我也不知道
有没有oj链接
有的,oj题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312
小哥哥,要避免双for循环
#include<iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct student {
int name;
int de;
int cai;
int d;
int sum;
};
bool mysort(student a,student b) {
if(a.d!= b.d) return a.d < b.d;
else if(a.sum != b.sum) return a.sum > b.sum;
else if(a.de != b.de) return a.de > b.de;
else return a.name<b.name;
}
int main() {
int n,L,H;
scanf("%d",&n);
int num=0;
scanf("%d%d",&L,&H);
student stu[n];
int count=n;
for(int i=0; i<n; i++) {
scanf("%d%d%d",&stu[i].name ,&stu[i].de ,&stu[i].cai);
stu[i].sum =stu[i].de +stu[i].cai ;
if(stu[i].de <L||stu[i].cai <L) {
count--;
stu[i].d =5;
}
else if(stu[i].de >=H&&stu[i].cai>=H)
stu[i].d =1;
else if(stu[i].de >=H&&stu[i].cai<H)
stu[i].d =2;
else if(stu[i].de <H&&stu[i].cai<H&&stu[i].de >=stu[i].cai )
stu[i].d =3;
else
stu[i].d =4;
}
sort(stu,stu+n,mysort);
printf("%d\n",count);
for(int i=0; i<count; i++) {
printf("%d %d %d\n",stu[i].name,stu[i].de,stu[i].cai);
}
}