首页 > 编程语言 >PAT-basic-1028 人口普查 java c++

PAT-basic-1028 人口普查 java c++

时间:2023-04-12 16:47:27浏览次数:43  
标签:count java name int totalLive 1028 c++ youngest oldest

一、题目


某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

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

输入格式:

输入在第一行给出正整数 N,取值在(0,105];随后 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

二、解析


表示年份有一个小技巧,18140906表示1814.9.6,

int totalLive = year*10000 + month*100 + day;

首先判断输入是否合法,合法再判断是否更新最年长或最年少的人的名字。

三、代码


java版,会超时,挺离谱的。

import java.io.*;
import java.util.Scanner;
public class Main {
    static final int  MIN_LIMIT = 18140906;
    static final int  MAX_LIMIT = 20140906;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        Person youngest = new Person(null, Integer.MIN_VALUE);
        Person oldest =  new Person(null, Integer.MAX_VALUE);
        int count = 0;

        for (int i = 0; i < n; i++) {
            String[] str = br.readLine().split("\\s+");
            String name = str[0];
            String[] split = str[1].split("\\/");
            int year = Integer.parseInt(split[0]);
            int month = Integer.parseInt(split[1]);
            int day = Integer.parseInt(split[2]);

            int totalLive = year*10000 + month*100 + day;

            if(isOK(totalLive)){
                count++;
                if(totalLive < oldest.totalLive){
                    oldest.name = name;
                    oldest.totalLive = totalLive;
                }
                if(totalLive > youngest.totalLive){
                    youngest.name = name;
                    youngest.totalLive = totalLive;
                }
            }
        }
        if(count == 0){
            System.out.println(count);
        }else{
            System.out.print(count + " " + oldest.name + " " + youngest.name);
        }

    }
    public static boolean isOK(int cur){
        if(cur < MIN_LIMIT || cur > MAX_LIMIT)
            return false;
        return true;
    }
    static class Person {
        String name;
        int totalLive;

        public Person(String name, int totalLive) {
            this.name = name;
            this.totalLive = totalLive;
        }
    }
}

c++ ac: 

//
// Created by dongdong on 2023/4/10.
//
#include <cstring>
#include "iostream"

#define MIN_LIMIT 18140906
#define MAX_LIMIT 20140906

typedef struct P {
    char name[6];
    int totalLive;
};
int isOK(int cur){
    if(cur < MIN_LIMIT || cur > MAX_LIMIT)
        return 0;
    return 1;
}
int main(){
    int n;
    P youngest, oldest;
    char str1[6]="";
    strcpy(youngest.name, str1);
    youngest.totalLive = INT32_MIN;

    char str2[6] = "";
    strcpy(oldest.name, str2);
    oldest.totalLive = INT32_MAX;

    scanf("%d", &n);

    int count = 0;
    for(int i=0; i<n; i++){
        char name[6];
        int year, month, day;
        scanf("%s %d/%d/%d", name, &year, &month, &day);
        int tLive = year*10000 + month*100 + day;
        if(isOK(tLive)){
            count++;
            if(tLive < oldest.totalLive){
                strcpy(oldest.name, name);
                oldest.totalLive = tLive;
            }
            if(tLive > youngest.totalLive){
                strcpy(youngest.name, name);
                youngest.totalLive = tLive;
            }
        }
    }
    if(count == 0)
        printf("%d\n", count);
    else
        printf("%d %s %s", count, oldest.name, youngest.name);
    return 0;
}

 

标签:count,java,name,int,totalLive,1028,c++,youngest,oldest
From: https://www.cnblogs.com/langweixianszu/p/17310297.html

相关文章

  • Java构建树结构的公共方法
    一、前提pId需要传入用来确认第一级的父节点,而且pId可以为null。树实体类必须实现:TreeNode接口MyTreeVo必须有这三个属性:id、pId、children可以根据不同需求,配置TreeNode和MyTreeVo中固定的属性二、代码定义TreeNode接口publicinterfaceTreeNode{StringgetId(......
  • PAT-basic-1029 旧键盘 java c++
    一、题目旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入格式:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括......
  • c++基础 打卡1
    一、面向对象的编程语言有的特点。    ①面向对象的编程语言最大的特点是结构化程序,二结构化程序的设计思路是自顶向下、逐步求精;其程序化结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每个模块内部均是由顺序、......
  • 开心档之C++ 修饰符类型
    C++修饰符类型C++允许在 char、int和double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。下面列出了数据类型修饰符:signedunsignedlongshort修饰符 signed、unsigned、long和short 可应用于整型,signed 和 unsigned ......
  • java发送Http请求
    使用java11添加的HttpClient新API发送Http(Https)请求HTTP客户端是在Java11中添加的。它可以用于通过网络请求HTTP资源。它支持HTTP/1.1和HTTP/2(同步和异步编程模型),将请求和响应主体作为反应流处理,并遵循熟悉的构建器模式。参考文章:https://blog.csdn.net/allway2/articl......
  • c++ 打卡第三天
    2023-04-12百钱百鸡问题一、问题描述。    一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,我可以通过三种鸡各买多少实现100钱买一百只鸡。二、设计思路。    ①通过以上题我们可以确定两个方程式      公鸡数量+母鸡数量+小鸡数量=100。   ......
  • C++教材第二章课后习题 2-27
    用穷举法找出1~100的质数并显示出来,分别用while,do...while,for循环语句实现1#include<iostream>//for循环语句的实现2#include<cmath>3usingnamespacestd;4intmain()5{6inti,k,m;7for(k=2;k<=100;k++)//从2~1......
  • C++第二章课后练习 2-26
    实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete)S(ort)Q(ui Select one:”提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示“数据已经增加、删除、排序。”输入为Q时程序结束。(1)要求使用if…else语句进行判断,用break、continue 控制程序流程......
  • Java开发笔记(不定时更新)
    1.IDEA在引入外部库时编译出现找不着库的问题:在resources目录中,新建一个lib目录,将外部库拷贝进去,这样打包时就不会出现找不见的情况。 2.对象列表按属性排序时空指针错误处理问题:List.sort(Comparator.comparing(X::a)在对列表按属性排序时,如果属性为空会报nullpoint的空指......
  • Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器
    一、贝叶斯定理贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下:  P(A)是A的先验概率P(B)是B的先验概率P(A|B)是A的后验概率(已经知道B发生过了)P(B|A)是B的后验概率(已经知道A发生过了)二......