概述
1: 是零个合理的人数,直接输出零,末尾不要有空格
2:是一个合理的人直接将这个人输出两次, 他既是最年长的也是最年轻的
#include <stdio.h>
#include <stdlib.h>
#define RIGHT 1
#define WRONG 2
#define FIRST 3
#define SECOND 4
#define MAX_NAME 6
typedef struct info {
char name[MAX_NAME];
int y;
int m;
int d;
} info;
int sum;
struct info *old; /* 记录最早出生的人 */
struct info *young; /* 记录最迟出生的人 */
int read_info ();
int which_older (struct info *first, struct info *second);
int record_man (struct info *man);
int print_result ();
/*------------------------------- 读信息 判断 ----------------------------------*/
int read_info () {
struct info *p;
struct info *max_age, *min_age;
max_age = malloc (sizeof(info));
min_age = malloc (sizeof(info));
max_age->y = 1814;
min_age->y = 2014;
max_age->m = min_age->m = 9;
max_age->d = min_age->d = 6;
int N, i;
//test
// FILE *f_read = fopen ("data.txt", "r");
N = 0;
scanf("%d", &N);
for (i = 0; i < N; ++i)
{
p = malloc(sizeof(info)); /* 读取一个人的信息 */
// fscanf (f_read, "%s %d/%d/%d", p->name, &p->y, &p->m, &p->d);
scanf ("%s %d/%d/%d", p->name, &p->y, &p->m, &p->d);
if (which_older(max_age, p) == FIRST && which_older(min_age, p) == SECOND)
record_man (p); /* 在规定的日期范围内 ,记录 */
else
free (p);
}
}
/*------------------------------ 记录这个出生日合理的人 --------------------------------*/
int record_man (struct info *man) {
++sum;
if (old == NULL || young == NULL) /* 当最年长和最年轻的人都还没有记录 */
{
if (old == NULL) /* 若最年长的人没有记录 */
old = man;
else /* 否则最年长的已经记录了,最年轻的人没有记录 */
{
if (which_older(man, old) == FIRST) /* 若当前这个人比已经记录的人年长 */
{
young = old; /* 记录 */
old = man;
}
else /* 否则当前这个人比 old记录的年轻 */
young = man;
}
}
else /* 已经记录了两个人了, */
{
if (which_older(man, old) == FIRST) /* 若当前这个人老 */
old = man;
else /* 若当前这个人还不是最老的 */
{
if (which_older(man, young) == SECOND)/* 若当前这个人年轻 */
young = man;
}
}
return 0;
}
/*------------------------ 判断first和second这两个人那个老,并返回结果 -----------------------*/
int which_older (struct info *first, struct info *second){
if (first->y < second->y) /* 出生的年小, 就是老 */
return FIRST;
else if (first->y > second->y) /* 出生的年大, 就是年轻 */
return SECOND;
else /* 这两个人同岁 first->y == second->y */
{
if (first->m < second->m) /* 同岁, 月份小,年纪大 */
return FIRST;
else if (first->m > second->m) /* 同岁, 月份大, 年纪小 */
return SECOND;
else /* 同年同月出生 */
{
if (first->d < second->d) /* 同年同月,但日子小, 年纪大 */
return FIRST;
else if (first->d > second->d)/* 同年同月,但日子大, 年纪小 */
return SECOND;
else /* 这个主要用来判断当前这个人是否合理 (在函数read_info里面用)*/
{ /* 在合理的人群中,相同生日无所谓,题目明确说,最年长和最年轻的人只有一个 */
if (first->y == 1814 ) /* 当前这个人是最年长的了 生日:1814/9/6 */
return FIRST; /* 合理 */
else /* 这个处理生日为 2014/9/6 或者合理返回内的 */
return SECOND;
}
}
}
}
/*----------------------------- 输出结果 ----------------------------------------*/
int print_result () {
printf ("%d", sum);
if (sum == 1)
{
if (old != NULL)
{
printf (" %s", old->name);
printf (" %s", old->name);
}
else
{
printf (" %s", young->name);
printf (" %s", young->name);
}
}
else if (sum > 1)
{
printf (" %s", old->name);
printf (" %s", young->name);
}
return 0;
}
int main () {
read_info ();
print_result ();
return 0;
}
邻居赶着群羊上山了,留下一只老母羊和它的三个仔,小样非常可爱,但这只孤零零的老母羊每天都在呼叫着,我猜它很孤独,它知道什么叫孤独吗?
后来我发现我错了,老母羊的三个仔如果出去溜达,老母羊看不见的时候它们的时候,老母羊就会没命的喊叫。所以我每次在这种情况下, 我看见小崽子们就拍手惊吓它们回巢。羊为什么只照看自己的孩子呢?它为什么会有这种感情呢?
最后
以上就是潇洒棉花糖为你收集整理的【PAT B1028】人口普查 (C语言)的全部内容,希望文章能够帮你解决【PAT B1028】人口普查 (C语言)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复