PAT-B 1028 Census (20 puntos)



1. Tema

Se realizó un censo en una determinada ciudad y se obtuvieron los cumpleaños de todos los residentes. Ahora, por favor, escriba un programa para encontrar a la persona más joven y mayor de la ciudad.
Aquí para asegurar que cada fecha ingresada sea legal, pero no necesariamente razonable, asumiendo que no hay personas mayores de más de 200 años en la ciudad, y hoy es 6 de septiembre de 2014, por lo que los cumpleaños y fechas de más de 200 años son Cumpleaños son irrazonable y debe filtrarse.

Formato de entrada:

Ingrese un número entero positivo N en la primera línea y el valor es (0, 1 0 5) (0,10 ^ {5})( 0 ,1 05 ) Las
siguientes N líneas, cada línea da el nombre de una persona (una cadena de no más de 5 letras en inglés).
Y el cumpleaños dado en el formato aaaa / mm / dd (es decir, año / mes / día). El título garantiza que los mayores y los más jóvenes no estén atados.

Formato de salida:

Muestra el número de cumpleaños válidos, los nombres de la persona mayor y la más joven en una fila, separados por espacios.

Muestra de entrada:

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

Salida de muestra:

3 Tom John


2. Ideas y precauciones

Idea: utilice una estructura para almacenar el nombre y la fecha de nacimiento de la persona. Tenga en cuenta que la matriz debe abrir suficiente espacio. Antes, elegí ingresar directamente el nombre y la fecha en la matriz en el bucle for, por lo que los elementos no compatibles en la estructura también se almacenan en la estructura. La clasificación de bucles posterior es inconveniente.

  1. Entonces, primero definimos una función para determinar si los caracteres de entrada cumplen con el límite de edad. Use variables temporales para almacenar la información de entrada, use nuestra función definida para juzgar la información de entrada y almacénela en la estructura si coincide.
  2. "=" No se pueden usar valores negativos entre cadenas y se informará un error, así que use la función styrcpy () para copiar.
  3. Cuando filtramos los elementos y los colocamos en la estructura, necesitamos encontrar el año más antiguo y su nombre. En este momento, defina temporalmente variables para comparar los años en la estructura.
  4. Después de definir la estructura, es fácil pensar en usar la función sort para ordenar, pero el resultado de la ordenación no es satisfactorio y todavía no hay orden. Por lo tanto, considere definir una cadena estándar y comparar elementos de estructura en un bucle.
  5. Una cosa que vale la pena señalar es que cuanto menor es el año de nacimiento, mayor es la edad; cuanto mayor es el mes de la misma edad, menor es la edad. Así que preste atención a la definición de la cadena de comparación quién es el más grande y quién es el más pequeño.

La función de filtro definida es la siguiente:

	bool judge(char temp[])
	{
    
    
	char a[20]="2014/09/06";
	char b[20]="1814/09/06";
		if(  strcmp(a,temp)>=0&&strcmp(b,temp)<=0) return true; 
		else return false;
	}
//strcmp(a,b);如果a>b则返回一个正数,如果a==b,那么返回0,如果a<b返回负数

En la definición de esta función, necesitamos definir temporalmente dos cadenas para compararlas con la cadena de entrada.


Tres, código de CA

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
bool judge(char temp[]); 
struct Person
{
    
    
	char date[20];
	char name[8];
}person[100001];  //出现了段错误,可能是因为这个地方的数组开辟小了。 

int main()
{
    
       
	int N,count=0,num=0;
	cin>>N;
	for(int i=0;i<N;i++)
	{
    
    	
	    char temp_name[8],temp_date[20];
	 	cin>>temp_name>>temp_date;
	 	
		if( judge(temp_date)==1)
		{
    
    
		 count++;
		 strcpy(person[num].date,temp_date);
		 strcpy( person[num].name,temp_name);
		 num++;
		}
	}
	 	char min[20]="2014/09/06";
		char max[20]="1814/09/06";
	 	char young[10],old[10];               //将找到的出生之最着姓名存储于其中 
	    
	//寻找最小值和最大值 
    for(int i=0;i<num;i++) 				  //i循环的是经过筛选后的元素,所以num<=N 
 	{
    
    
	    if(strcmp(min,person[i].date)>0)  //找到出生最早,年龄最大的。 
	    {
    
    
	 	strcpy(min,person[i].date);
	 	strcpy(old,person[i].name);
	    }
	 
	    if(strcmp(max,person[i].date)<0)  //找到出生最晚,年龄最小的。 
	    {
    
    
	 	strcpy(  max,person[i].date);
	 	strcpy(young,person[i].name);
	    }
 	}
	 	
	//结果判断与输出 
	if(num==0)  printf("0\n");
	else 		printf("%d %s %s\n",num,old,young);
}	

	bool judge(char temp[])
	{
    
    
		char a[20]="2014/09/06";
		char b[20]="1814/09/06";
		if(  strcmp(a,temp)>=0&&strcmp(b,temp)<=0) return true; 
		else return false;
	}
	

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/SKMIT/article/details/113887141
Recomendado
Clasificación