用C语言这样写哪里错了???

「已注销」 2018-08-14 08:26:57
题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312

我用C++通过了此题,而用C语言却有3个点不过,如下:


以下将提供C++通过代码和C语言不过代码,希望能帮我看看哪里有问题,非常感谢!
C++通过代码:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Student{
int stid,de,cai;
};//定义结构体,成员为考号,德分,才分
bool cmp(Student a,Student b)
//设计适应题目的比较函数以调用排序算法
{
if(a.de+a.cai!=b.de+b.cai)
return a.de+a.cai>b.de+b.cai;//降序
else
{
if(a.de!=b.de)
return a.de>b.de;//降序
else
return a.stid<b.stid;//升序
}
}
int main()
{
std::ios::sync_with_stdio(false);//注意加上这句以应对大量IO
int N,L,H,M=0;
Student t;//定义结构体变量
vector<Student>stu1,stu2,stu3,stu4;
//使用vector线性存储结构体,以方便调用排序算法
cin>>N>>L>>H;
for(int i=0;i<N;i++)
{
cin>>t.stid>>t.de>>t.cai;
if(t.de>=L&&t.cai>=L)
{
M++;//统计达到最低分数线的考生人数
if(t.de>=H&&t.cai>=H)
stu1.push_back(t);
else if(t.de>=H&&t.cai<H)
//才分不到但德分到线,德分到线的意思是德分不小于此线
stu2.push_back(t);
else if(t.de<H&&t.cai<H&&t.de>=t.cai)
stu3.push_back(t);
else
stu4.push_back(t);
}
}
//调用排序算法
sort(stu1.begin(),stu1.end(),cmp);
sort(stu2.begin(),stu2.end(),cmp);
sort(stu3.begin(),stu3.end(),cmp);
sort(stu4.begin(),stu4.end(),cmp);
//输出,注意换行时使用endl耗时很长,会超时,故用'\n'或“\n”
cout<<M<<'\n';
for(int i=0;i<stu1.size();i++)
cout<<stu1[i].stid<<' '<<stu1[i].de<<' '<<stu1[i].cai<<'\n';
for(int i=0;i<stu2.size();i++)
cout<<stu2[i].stid<<' '<<stu2[i].de<<' '<<stu2[i].cai<<'\n';
for(int i=0;i<stu3.size();i++)
cout<<stu3[i].stid<<' '<<stu3[i].de<<' '<<stu3[i].cai<<'\n';
for(int i=0;i<stu4.size();i++)
cout<<stu4[i].stid<<' '<<stu4[i].de<<' '<<stu4[i].cai<<'\n';
return 0;
}


C语言不过代码
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100000
struct Student{
int stid,de,cai;
}stu1[MAXSIZE],stu2[MAXSIZE],stu3[MAXSIZE],stu4[MAXSIZE];
typedef struct Student ElemType;
int Compare(const void *A, const void *B)
{
ElemType *a=(ElemType*)A;
ElemType *b=(ElemType*)B;
int d1=a->de,d2=b->de;
int c1=a->cai,c2=b->cai;
int id1=a->stid,id2=b->stid;
int total1=d1+c1,total2=d2+c2;
if(total1!=total2)
return total2-total1;
else
{
if(d1!=d2)
return d2-d1;
else
return id1-id2;
}
}
int main()
{
int N,L,H;
struct Student t;
scanf("%d%d%d",&N,&L,&H);
int M=0,i,size1=0,size2=0,size3=0,size4=0;
while(N--)
{
scanf("%d%d%d",&t.stid,&t.de,&t.cai);
if(t.de>=L&&t.cai>=L)
{
M++;
if(t.de>=H&&t.cai>=H)
stu1[size1++]=t;
else if(t.de>=H&&t.cai<H)
stu2[size2++]=t;
else if(t.de<H&&t.cai<H&&t.de>t.cai)
stu3[size3++]=t;
else
stu4[size4++]=t;
}
}
qsort(stu1,size1,sizeof(ElemType),Compare);
qsort(stu2,size2,sizeof(ElemType),Compare);
qsort(stu3,size3,sizeof(ElemType),Compare);
qsort(stu4,size4,sizeof(ElemType),Compare);
printf("%d\n",M);
for(i=0;i<size1;i++)
printf("%d %d %d\n",stu1[i].stid,stu1[i].de,stu1[i].cai);
for(i=0;i<size2;i++)
printf("%d %d %d\n",stu2[i].stid,stu2[i].de,stu2[i].cai);
for(i=0;i<size3;i++)
printf("%d %d %d\n",stu3[i].stid,stu3[i].de,stu3[i].cai);
for(i=0;i<size4;i++)
printf("%d %d %d\n",stu4[i].stid,stu4[i].de,stu4[i].cai);
return 0;
}
...全文
262 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
不开心的莫默 2018-08-14
  • 打赏
  • 举报
回复
没错啊,都对的

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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