Sangfor 2022 Campus Recruitment Examen écrit C++ Sujets de programmation

Papiers


Le document de test comprend 11 questions à choix multiples indéterminées, 11 questions à remplir et 2 questions de programmation, avec une limite de temps de 120 minutes.


premier problème de programmation

Sujet : Un chef vend 1 à 6 six types d'aliments différents. Chaque aliment doit utiliser ses propres ustensiles de cuisine spéciaux. La cuisinière du chef ne peut placer que jusqu'à 3 types d'ustensiles de cuisine en même temps, le chef décide donc de les remplacer lorsqu'il n'y a pas assez d'espace. Il faut 15 minutes pour cuire chaque aliment et 6 minutes pour remplacer les ustensiles de cuisine. Veuillez calculer le temps nécessaire pour compléter la liste de commande dans l'ordre de commande. (Veuillez utiliser le langage c pour compléter)

Description de l'entrée : un chiffre par ligne, 1-6 représente 6 types de commandes, 0 représente le début de la commande et 7 représente la fin.

Description de la sortie : un nombre représentant le temps total requis par le cuisinier.

Remarques : Il convient d'examiner l'idée de moins récemment utilisé (LRU), mais les conteneurs STL ne peuvent pas être utilisés.

#include <stdio.h>

void swap(int* a, int* b) {
    
    
	int t = *a;
	*a = *b;
	*b = t;
}

int main() {
    
    
	int t;
	scanf_s("%d", &t);
	if (t == 0) {
    
    
		scanf_s("%d", &t);
	}
	int a = t, b = 0, c = 0, ans = 15;
	while (1) {
    
    
		scanf_s("%d", &t);
		if (t == 7) {
    
    
			break;
		}
		ans += 15;
		if (b == 0) {
    
    
			if (a == t) {
    
    
				continue;
			}
			b = t;
			continue;
		}
		if (c == 0) {
    
    
			if (a == t) {
    
    
				swap(&a, &b);
				continue;
			}
			if (b == t) {
    
    
				continue;
			}
			c = t;
			continue;
		}
		if (t == a) {
    
    
			swap(&a, &b);
			swap(&b, &c);
			continue;
		}
		if (t == b) {
    
    
			swap(&b, &c);
			continue;
		}
		if (t == c) {
    
    
			continue;
		}
		swap(&a, &b);
		swap(&b, &c);
		c = t;
		ans += 6;
	}
	printf("%d\n", ans);
	return 0;
}

deuxième question de programmation

Sujet : Xiao Ming participe à une compétition de robots. Le lieu de la compétition est un carré n*m. Maintenant, il est stipulé que le robot commence par le coin supérieur gauche et se dirige vers le coin inférieur droit.En raison de contraintes de temps, Xiao Ming n'a conçu que l'algorithme intelligent le plus simple, et son robot ne peut que descendre ou se diriger vers la droite. Xiao Ming veut maintenant savoir combien de plans il y a pour arriver à la fin.

Description de l'entrée : la première ligne d'entrée est constituée de deux entiers n, m (1≤n, m≤10), les n lignes suivantes ont m nombres, les nombres ne seront que 0 ou 1, 0 signifie passable, 1 signifie Obstacles, données garantir que le point final doit être 0.

Description de la sortie : un entier ans, indiquant le nombre de schémas. Les données sont générées de manière aléatoire et la réponse est garantie de ne pas dépasser 2^31.

Remarques : Je ne peux pas résoudre le problème de programmation dynamique. Plus tard, j'ai découvert qu'il existe une solution au problème Java sur Internet : https://blog.csdn.net/zhangxxin/article/details/115735641 . J'ai découvert que le L'idée est assez simple. J'ai utilisé cette idée en C++ pour la reproduire à nouveau, et je sens que j'ai encore besoin de pratiquer davantage la programmation dynamique.

#include <iostream>
#include <vector>

using namespace std;

int main() {
    
    
	int n, m;
	cin >> n >> m;
	vector<vector<int>> g(n, vector<int>(m, 0));
	vector<vector<int>> dp(n, vector<int>(m, 0));
	int t;
	for (int i = 0; i < n; ++i) {
    
    
		for (int j = 0; j < m; ++j) {
    
    
			cin >> t;
			g[i][j] = t;
		}
	}
	for (int i = 0; i < n; ++i) {
    
    
		if (g[i][0] == 1) {
    
    
			break;
		}
		dp[i][0] = 1;
	}
	for (int i = 0; i < m; ++i) {
    
    
		if (g[0][i] == 1) {
    
    
			break;
		}
		dp[0][i] = 1;
	}
	for (int i = 1; i < n; ++i) {
    
    
		for (int j = 1; j < m; ++j) {
    
    
			if (g[i][j] == 1) {
    
    
				continue;
			}
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
		}
	}
	cout << dp[n - 1][m - 1] << endl;
	return 0;
}


Je ne suis qu'un novice en programmation, j'écris un blog dans le but de résumer et de communiquer, j'implore tout le monde de me critiquer et de me corriger !

Supongo que te gusta

Origin blog.csdn.net/embracestar/article/details/120042649
Recomendado
Clasificación