NOJ 240题小明的调查统计(二)结构体按照多个条件排序

举报
Linux猿 发表于 2021/08/06 01:05:00 2021/08/06
【摘要】 题目链接~~> 这一题其实一点也不难,属于简单题。开始wrong了好几次,后来才发现sort排序不稳定,需要在给结构体排序时先按成绩排,如果成绩一样,再按班级号从小到大排,如果班级 号一样,再按学号从小到大排!!! 代码: #include<stdio.h>#include<algorithm>using namespace std;str...

题目链接~~>

这一题其实一点也不难,属于简单题。开始wrong了好几次,后来才发现sort排序不稳定,需要在给结构体排序时先按成绩排,如果成绩一样,再按班级号从小到大排,如果班级 号一样,再按学号从小到大排!!!

代码:


  
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. struct zhang
  5. {
  6. int a,b,exam,c;
  7. }t[100005];
  8. bool cmp(zhang x,zhang y)
  9. {
  10. if(x.exam!=y.exam)
  11. return x.exam > y.exam ;
  12. else if(x.a!=y.a)
  13. return x.a < y.a ;
  14. else
  15. return x.b < y.b ;
  16. }
  17. int main()
  18. {
  19. int r=0,T,n,m,m1,j=0,i;
  20. scanf("%d%d",&T,&m);
  21. while(T--)
  22. {
  23. scanf("%d",&n);
  24. j++;//班级
  25. for(i=1;i<=n;i++)
  26. {
  27. scanf("%d",&t[r].exam);
  28. t[r].a=j;t[r].b=i;
  29. r++;
  30. }
  31. }
  32. sort(t,t+r,cmp);
  33. t[0].c=1;
  34. for(i=1;i<r;i++)
  35. if(t[i].exam==t[i-1].exam)
  36. t[i].c=t[i-1].c;
  37. else t[i].c=t[i-1].c+1;
  38. while(m--)
  39. {
  40. scanf("%d",&m1);
  41. for(i=0;i<r;i++)
  42. {
  43. if(t[i].c==m1)
  44. printf("%d %d\n",t[i].a,t[i].b);
  45. else if(t[i].c>m1)
  46. break;
  47. }
  48. }
  49. return 0;
  50. }


 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/9366069

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。