CC20020419 2022-03-05 10:29 采纳率: 85%
浏览 318
已结题

生日相同:在有180人的大班级中

描述:在有180人的大班级中,存在两个人生日相同的概率非常大,现在给出每个学生的名字,出生月日。试找出所有生日相同的学生。
输入:第一行为整数呢,表示有n个学生,此后每行包含一个字符串和两个整数,分别表示学生的名字和出生年月,中间有空格
输出:对所有的输出按照日期从前到后,对生日相同的名字,按名字从短到长输出,长度相同的按字典顺序输出,没有生日相同的学生,输出“None”
样例:
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Langrange 4 5
Bill 3 2
输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange

  • 写回答

3条回答 默认 最新

  • 关注
    #include<stdio.h>
    #include<string.h>
    struct stuent{
        char name[100];
        int birth[2];
    }stu[200];
    struct stuent tmp;
    int main(){
        int i,j,k;
        int n;
        int flag=0;
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%s",stu[i].name);
            scanf("%d%d",&stu[i].birth[0],&stu[i].birth[1]);
        }   
        for(i=0;i<n;i++){
            for(j=n-1;j>i;j--){
                if(strlen(stu[j].name)<strlen(stu[j-1].name)){
                    tmp=stu[j];
                    stu[j]=stu[j-1];
                    stu[j-1]=tmp; 
                }
                else if(strlen(stu[j].name)==strlen(stu[j-1].name)&&strcmp(stu[j].name,stu[j-1].name)<0){
                    tmp=stu[j];
                    stu[j]=stu[j-1];
                    stu[j-1]=tmp; 
                }            
            }
        }
        for(i=0;i<n;i++){
            for(j=n-1;j>i;j--){
                if(stu[j].birth[0]<stu[j-1].birth[0]){
                     tmp=stu[j];
                    stu[j]=stu[j-1];
                    stu[j-1]=tmp; 
                }
                else if(stu[j].birth[0]==stu[j-1].birth[0]&&stu[j].birth[1]<stu[j-1].birth[1]){
                    tmp=stu[j];
                    stu[j]=stu[j-1];
                    stu[j-1]=tmp;
                }       
            }
        }
        for(i=0;i<n;i=j){       
            for(j=i+1;j<n;j++){
                if(stu[i].birth[0]==stu[j].birth[0]&&stu[i].birth[1]==stu[j].birth[1])
                  ;
                else break;
            }
            if((j-i)>1){flag=1;
              printf("%d %d ",stu[i].birth[0],stu[i].birth[1]);
            for(k=i;k<j;k++) printf("%s ",stu[k].name);
            printf("\n");  
            }
            
        }
        if(!flag) printf("None");
        return  0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测