| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1724 人关注过本帖
标题:麻烦大佬们看看哪里有问题
只看楼主 加入收藏
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
结帖率:87.5%
收藏
已结贴  问题点数:16 回复次数:5 
麻烦大佬们看看哪里有问题
题目:
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:
输入在第一行给出正整数 N,取值在(0,pow(10,5)];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:
3 Tom John

下面是我的代码:可能有点长麻烦看看
#include <cstdio>
#include <cstdlib>
struct People
{
    char name[10];
    int year;
    int month;
    int day;
};

int main(void)
{
    struct People people[100000];
    int max_year=2014,max_month=9,max_day=6;
    int min_year=1814,min_month=9,min_day=6;
    int i,index,count=0;
    scanf("%d",&index);
    char *max=NULL,*min=NULL;
    int x=0,y=0,z=0;
    int a=0,b=0,c=0;
    for(i=0;i<index;i++)
    {
        scanf("%s %d/%d/%d",people[i].name,&people[i].year,&people[i].month,&people[i].day);
        if((people[i].year==max_year&&people[i].month<=max_month&&people[i].day<=max_day)||(people[i].year==min_year&&people[i].month>=min_month&&people[i].day>=min_day)||((people[i].year<max_year)&&(people[i].year>min_year)))
        {
            count++;
            if(count==1)
            {
                max=min=people[i].name;
                a=people[i].year;b=people[i].month;c=people[i].day;//大
                x=people[i].year;y=people[i].month;z=people[i].day;//小
            }
            if((people[i].year>a)||(people[i].year==a && people[i].month>b)||(people[i].year==a && people[i].month==b &&people[i].day>c))
            {
                max = people[i].name;
                a=people[i].year;b=people[i].month;c=people[i].day;
            }
            if((people[i].year<x)||(people[i].year==x && people[i].month<y)||(people[i].year==x && people[i].month==y &&people[i].day<z))
            {
                min = people[i].name;
                x=people[i].year;y=people[i].month;z=people[i].day;
            }
            
        }
    }
    printf("%d %s %s\n",count,min,max);
   
    system("pause");
    return 0;
   
   
}
搜索更多相关主题的帖子: int || year People name 
2020-03-22 19:56
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4310
注 册:2007-12-27
收藏
得分:8 
验证有效性那部分表达式不对

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-22 20:58
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4310
注 册:2007-12-27
收藏
得分:0 
另外尽量不做没必要的事——把所有数据全部保存下来貌似没啥必要。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-22 21:07
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:8 
存在这种特殊情况
输入日期全部不合理
应该输出 0\n

https://zh.
2020-03-22 21:28
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
验证有效性可以简单点
int age = year*10000+mon*100+day;
然后直接和数字 20140906 和 18140906 比较就可以了
收到的鲜花
  • forever742020-03-22 21:39 送鲜花  1朵   附言:这个必须赞
  • 叶纤2020-03-22 22:00 送鲜花  1朵   附言:我也赞一个

https://zh.
2020-03-22 21:29
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
收藏
得分:0 
回复 5楼 lin5161678
谢谢了
2020-03-22 22:02
快速回复:麻烦大佬们看看哪里有问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055702 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved