weixin_63296519 2022-03-05 11:54 采纳率: 100%
浏览 55
已结题

不知道哪里有错误,求指正修改~

我的代码运行后总是有一个人的顺序是错误的,比如按照样例输入,Iris的顺序输出时是最后一位,求看看哪里有问题,然后帮忙修改一下~
描述
输入n个学生的信息,包括姓名,性别,出生年月。要求按年龄从小到大依次输出这些学生的信息。数据保证没有学生同年同月出生。

输入
第一行一个整数n,表示学生人数,n<=100.
接下来n行,每一行依次输入学生的姓名、性别、出生年份、出生月份。
输出
按年龄从小到大,一行输出一个学生的原始信息。

样例输入:
5
KouKAL male 1999 12
YaeSakura male 1999 8
Raminad male 1998 11
Zhang_ct female 1998 8
Iris female 2000 7

样例输出:

Iris female 2000 7
KouKAL male 1999 12
YaeSakura  male 1999 8
Raminad  male 1998 11
Zhang_ct female 1998 8

我的代码:

#include<iostream>
using namespace std;
struct student
{
 string xingming;
 string xingbie;
 int nian;
 int yue;
};
int main()
{
 int i;int j;
 int n;string a;string b;int c;int d;
 cin>>n;
 student stuArray[n];
 for(int i=0;i<n;i++)
 {
 cin>>a>>b>>c>>d;
 stuArray[i].xingming=a;
 stuArray[i].xingbie=b;
 stuArray[i].nian=c;
 stuArray[i].yue=d;};
    for(i=0;i<n;i++)
    {
     if(stuArray[i].nian<stuArray[i+1].nian)
     {
     int m=i+1;
  int temp=i;
  i=m;
  m=temp;
  };
  if(stuArray[i].nian=stuArray[i+1].nian)
  {if(stuArray[i].yue<stuArray[i+1].yue)
  {
   int p=i+1;
   int temp=i;
   i=p;
   p=temp;
  };

  };
 for(i=0;i<n;i++)
 {
  cout<<stuArray[i].xingming<<" ";
  cout<<stuArray[i].xingbie<<" ";
  cout<<stuArray[i].nian<<" ";
  cout<<stuArray[i].yue<<endl;
 };
};
}

  • 写回答

3条回答 默认 最新

  • 关注

    你的排序有问题,修改后

    img

    #include<iostream>
    using namespace std;
    struct student
    {
     string xingming;
     string xingbie;
     int nian;
     int yue;
    };
    int main()
    {student temp;
     int i;int j;
     int n;string a;string b;int c;int d;
     cin>>n;
     student stuArray[n];
     for(int i=0;i<n;i++)
     {
     cin>>a>>b>>c>>d;
     stuArray[i].xingming=a;
     stuArray[i].xingbie=b;
     stuArray[i].nian=c;
     stuArray[i].yue=d;};
        for(i=0; i<n-1; i++) {
            int k=i;
            for(j=i+1; j<n; j++)
                if(stuArray[k].nian<stuArray[j].nian)
                    k=j;
            if(i!=k) {
                temp=stuArray[i];
                stuArray[i]=stuArray[k];
                stuArray[k]=temp;
            }
        }
    
      for(i=0; i<n-1; i++) {
            for(j=i+1; j<n; j++)
                if(stuArray[i].nian==stuArray[j].nian) {
                    if(stuArray[i].yue<stuArray[j].yue) {
                        temp=stuArray[i];
                        stuArray[i]=stuArray[j];
                        stuArray[j]=temp;
                    }
                }
        }
    
     for(i=0;i<n;i++)
     {
      cout<<stuArray[i].xingming<<" ";
      cout<<stuArray[i].xingbie<<" ";
      cout<<stuArray[i].nian<<" ";
      cout<<stuArray[i].yue<<endl;
    
    };
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 Yolov5训练报错
  • ¥15 Unity发布gzip压缩的webgl之后让浏览器可以正常显示画面
  • ¥15 有没有人知道这种提示怎么关?现在不做ts项目了不知道咋关了,求解,现在我以前的js项目都是这种提示了
  • ¥15 为什么mysql做了碎片化处理data_free还是很高
  • ¥15 single positional indexer is out-of-bounds
  • ¥15 LSTM 模型数据量需要多少?
  • ¥15 mysql数据抓包开发报表
  • ¥15 linux系统下安装office打不开
  • ¥20 rsync脚本分发错误,文件不齐全
  • ¥15 labview顺序结构与时间延时