PAT Classe B 1028. Si vous n'avez pas de courant alternatif, ne vous entêtez pas, utilisez simplement la bonne méthode. PAT est encore très hostile à Java.

Recensement de 1028 (20 points)

Une ville a procédé à un recensement et a obtenu les anniversaires de tous les habitants. Maintenant, s'il vous plaît, écrivez un programme pour trouver les personnes les plus âgées et les plus jeunes de la ville.

Cela garantit que chaque date saisie est légale, mais pas nécessairement raisonnable - disons que l'on sait qu'il n'y a pas de personnes âgées de plus de 200 ans dans la ville, et que nous sommes aujourd'hui le 6 septembre 2014, donc les anniversaires de plus de 200 ans et pas encore La date de naissance n’est pas raisonnable et doit être filtrée.

Format d'entrée :

L'entrée donne un entier positif N dans la première ligne , avec une valeur en (0,105

] ; suivi de N lignes, chaque ligne donne le nom d'une personne (une chaîne composée de pas plus de 5 lettres anglaises) et l' yyyy/mm/ddanniversaire au format (c'est-à-dire année/mois/jour). La question garantit qu’il n’y a pas de lien entre la personne la plus âgée et la plus jeune.

Format de sortie:

Affichez le nombre d'anniversaires valides, les noms de l'aîné et du plus jeune, dans l'ordre sur une ligne, séparés par des espaces.

Exemple de saisie :

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
     
    

Échantillon de sortie :

3 Tom John

Analyse de la question :
Piège : Le point de test 3 est une situation dans laquelle toutes les données sont déraisonnables, il suffit de sortir 0 directement.

Il n'est pas nécessaire de convertir la date en type de données Date, elle peut être traitée directement comme une chaîne, en utilisant la méthode compareTo de la chaîne, telle que "1814/09/06" < "2001/05/12".

Pas de code AC :

 import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
    
    
    public static void main(String[] args) throws Exception{
    
    
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int N=Integer.parseInt(br.readLine());
        //分别存放临时名字,临时日期,年少名字,年长名字
        String name,date,maxname="",minname="",maxdate="1814/09/06",mindate="2014/09/06";
        int count=0;//记录满足范围的个数
        for(int i=0;i<N;i++){
    
    
            String[] str=br.readLine().split(" ");
            name=str[0];date=str[1];//临时名字,临时日期
            //date必须满足这个范围
            if(date.compareTo("2014/09/06")<=0&&date.compareTo("1814/09/06")>=0){
    
    
                count++;//记录满足范围的个数
                //寻找年少者,这里要是不理解的话好好体会体会,主要是符号,>还是<
                if(maxdate.compareTo(date)<0){
    
    
                    maxdate=date;
                    maxname=name;
                }
                //寻找年长者
                if(mindate.compareTo(date)>0){
    
    
                    mindate=date;
                    minname=name;
                }
            }
        }
        
        //如果count=0,直接输出count
        System.out.print(count);
        if(count!=0){
    
    
            System.out.printf(" "+minname+" "+maxname);
        }
    }
}

Je pense que cette méthode est assez simple. Vous pouvez également convertir toutes les dates en type int et comparer la relation de taille entre 18140906, 20140906 et les données données. Cette méthode expire toujours au dernier point de test.

Pour plus d'analyses du sujet, veuillez suivre le compte public Algorithm Baby

Je suppose que tu aimes

Origine blog.csdn.net/CSDN_Lrcx/article/details/116168330
conseillé
Classement