Notas de entrenamiento PAT: Grado B Zhenti --- Clasificación de números (20)

1. Descripción del título

Descripción del Título

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。

Ingrese descripción:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

Descripción de salida:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。

Ejemplo de entrada:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

Ejemplo de salida:

30 11 2 9.7 9

2. Mi código de CA

#include<stdio.h>
#include<math.h>

int main(){
	int n, a1, a2, a3, a5, a, i, j, c, d, e;
	float k, a4;
	scanf("%d", &n);
	a1 = a2 = a3 = a4 = a5 = d = 0;
	for( i = 1, j = 0, k = 0.0; i <= n; i++){
		scanf("%d", &a);
		switch (a % 5){
			case 0 : if(a % 2 == 0) a1 += a; break;
			case 1 : a2 += pow(-1, j) * a; j++; break;
			case 2 : a3++; break;
			case 3 : a4 += a; k++; break;
			case 4 : if( a > a5) a5 = a; d++;
		}
//		if(a%5 == 0 && a % 2 == 0)
//			a1 += a;
//		else if( a % 5 == 1){
//			a2 += pow(-1, j) * a;
//			j++;
//		}
//		else if( a % 5 == 2)
//			a3++;
//		else if( a % 5 == 3){
//			a4 += a;
//			k++;
//		}
//		else if( a % 5 == 4){
//			if( a > a5){
//				a5 = a;
//			}
//		}	
	} 
	
	if(a1) printf("%d ", a1);
	else printf("N ");
	if(j != 0) printf("%d ", a2);
	else printf("N ");
//	直接判断j即可,只要j大于零,那么就输出a2的值。 
	if(a3 != 0) printf("%d ", a3);
	else printf("N ");
	if(k) printf("%.1f ", a4/k);
	else printf("N ");
	if(d) printf("%d", a5);
	else printf("N");
}

Tres, relacionados con la experiencia

1. Análisis de problemas:

  • Punto de prueba 1: entrada y salida de datos;

  • Punto de prueba dos: bucle básico, gramática de juicio;

Segundo, experiencia

  • Hay algunos casos especiales a considerar en este tema: cuando el resultado de la suma intercalada es 0, no significa que el segundo tipo de número no existe, así que agregué una variable aquí para determinar si el cálculo del segundo tipo de número se realiza, y si se ingresa Para el cálculo del segundo tipo de números, este valor se puede emitir directamente al final.
  • Al calcular la serie de entrelazado, usé la potencia: a ^ b, y luego descubrí que había un problema con la salida, y luego aprendí que esta es una operación XOR en binario. Si desea lograr la operación de potencia que necesito, debe usar la función matemática pow (,);

  • Además, comencé a usar la instrucción if branch, que está un poco hinchada y parece más concisa y cómoda después de cambiar a la instrucción switch;

  • Descubrí que la legibilidad de mi propio código todavía es pobre, a, i, j, c, d, e; esta parte de los datos no puede ser clara de un vistazo, debería ser como algunos estudiantes escribieron, count1, count2 ... .... Esto corresponde al número de cálculo Las variables auxiliares como los números aumentan la legibilidad del código.

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_41914687/article/details/103942118
Recomendado
Clasificación