※ 1059 Concurso de lenguaje C (20 puntos)

El concurso de lenguaje C es un concurso alegre organizado por la Facultad de Ciencias de la Computación de la Universidad de Zhejiang. Dado que el tema del concurso es divertido, las reglas de adjudicación también son muy divertidas:

  • 0. El campeón ganará un "premio misterioso" (como una gran colección de trabajos de investigación de estudiantes ...).
  • 1. El 素数estudiante clasificado ganará el mejor premio: ¡la muñequita amarilla!
  • 2. Otros recibirán chocolate.

Teniendo en cuenta el ranking final del concurso y una serie de identificaciones de los participantes, hay que entregar los premios que deben recibir estos participantes.

Formato de entrada:

Ingrese la primera línea para dar un número entero positivo N (≤10 ^ 4), que es el número de participantes. Las siguientes N filas dan la clasificación final, y cada fila proporciona la ID ( 4 位数字composición) de un concursante en el orden de clasificación . A continuación, se dan un número entero positivo de K y K ID que se van a consultar.

Formato de salida:

Para cada ID a consultar, salga en una línea ID: 奖品, donde el premio es Mystery Award(Premio misterioso), Minion(Minion) o Chocolate(Chocolate). Si la identificación que marcó no está en la clasificación , imprímala Are you kidding?(¿qué me pasa?). Si se ha verificado la identificación (es decir, el premio ya ha sido recibido), imprímalo ID: Checked(no se puede comer más y tomar más).

Muestra de entrada:

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222

Salida de muestra:

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

Idea: ¡
Debido al límite de tiempo de 200 ms, cuerda + violencia debe expirar! ! !
Por lo tanto 数组下标, el método utilizado:
establece la matriz num (la capacidad de la matriz debe ser lo suficientemente grande y el subíndice de la matriz es equivalente a id), y luego el contenido de la matriz es la clasificación de la id.
Además, establece una matriz de banderas para determinar si el id tiene premios repetidos!

responder:

#include<iostream>
#include<cmath>

using namespace std;

const int N = 1e4;
int num[N];
bool flag[N] = {
    
     false };//判断该id有无重复领取奖品
//判断素数
bool fun1(int x) {
    
    
	if (x == 1) return false;
	for (int i = 2; i < sqrt(x) + 1; i++) {
    
    
		if (x % i == 0) return false;
	}
	return true;
}

int main() {
    
    
	ios::sync_with_stdio(false);
	int n, k, temp;
	scanf("%d", &n);
	for(int i = 0; i < n; i++) {
    
    
		scanf("%d", &temp);
		num[temp] = i + 1;
	}
	scanf("%d", &k);
	for (int i = 0; i < k; i++) {
    
    
		scanf("%d", &temp);
		if (num[temp] == 0) {
    
    //id不存在
			printf("%.4d: Are you kidding?\n", temp);
			continue;
		}
		if (!flag[temp]) {
    
    
			flag[temp] = true;//置真,表领过奖品了
			if (num[temp] == 1){
    
    
				printf("%.4d: Mystery Award\n", temp);
			}
			else if (fun1(num[temp])) {
    
    
				printf("%.4d: Minion\n", temp);
			}
			else {
    
    
				printf("%.4d: Chocolate\n", temp);
			}
		}
		else {
    
    
			printf("%.4d: Checked\n", temp);
		}
	}

	return 0;
}

Nota:

  1. Se puede usar cuando hay %.4dmenos de 4 dígitos La función nativa printf del lenguaje c usa menos de 4 dígitos.
  2. A juzgar por la función de números primos, si usa x / 2 o sqrt (x), puede, pero si usa sqrt (x), debe agregar uno ----> de lo sqrt(x) + 1contrario, ¡la respuesta al punto de prueba 2 es incorrecta! !

sqrt (x) + 1 es más rápido que x / 2! ! ! !

Supongo que te gusta

Origin blog.csdn.net/qq_44715943/article/details/115054069
Recomendado
Clasificación