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日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分