[Algorithme de langage C] bloquer le mouvement

Implémentation d'un algorithme de mouvement de bloc en langage C

Environnement utilisé pour l'apprentissage

Matériel de référence

Dernier dictionnaire d'algorithmes en langage C (écrit par Haruhiko Okumura / Revue technique de la première édition 1991: 249 pages)

Vue d'ensemble de l'algorithme de mouvement de bloc

C'est un algorithme qui remplace les blocs dans une chaîne de caractères.

(Ce qui suit est tiré du matériel de référence)

Déplacer le bloc 12345 après le bloc abcd dans une commande d'éditeur, par exemple le texte xyz12345abcdefg, donne xyzabcd12345efg. Cette opération consiste également à échanger 12345 et abcd, ou à faire pivoter 12345abcd vers la droite de 4 caractères.

Cette fois, nous avons mis en place un processus pour remplacer les mots «PRINCIPES DE PROGRAMMATION», qui se composent de deux mots «PROGRAMMATION» et «PRINCIPES», par «PRINCIPES DE PROGRAMMATION».

Code source

moveblock.c


/*Bloquer le mouvement du bloc*/

#include <stdio.h>
#include <stdlib.h>

char sentense[] = "PROGRAMMINGPRINCIPLES";

int main(void) {
	printf("%s\n",sentense);
	//Appelez la fonction de déplacement de chaîne
	rotate(0, 10, 20);	
	printf("%s\n", sentense);

	return EXIT_SUCCESS;
}

//Fonction d'inversion de chaîne
//Si la longueur de la chaîne est impaire, seul le caractère central n'est pas inversé
void reverse(int i,int j){
	//Variable Tmp à remplacer
	int t;
	while(i < j){
		t = sentense[i];
		sentense[i] = sentense[j];
		sentense[j] = t;
		
		//Décale la position de la chaîne de caractères à traiter une par une
		i++;
		j--;
		
		printf("%s i=%d j=%d (reverse)\n", sentense, i, j);
	}
}

//Fonction de mouvement des cordes
//Appelez la fonction inverse
//Premier argument: position de départ de la partie gauche de la chaîne de caractères à remplacer
//Deuxième argument: position de départ de la partie droite de la chaîne de caractères à remplacer
//Troisième argument: toute la chaîne de caractères à remplacer
void rotate(int left, int mid, int right){
	reverse(left, mid);
	reverse(mid + 1,right);
	reverse(left, right);
}

Résultat d'exécution

Le résultat était comme prévu.

result.txt(Tout)


Success #stdin #stdout 0s 4488KB

PROGRAMMINGPRINCIPLES
GROGRAMMINPPRINCIPLES i=1 j=9 (reverse)
GNOGRAMMIRPPRINCIPLES i=2 j=8 (reverse)
GNIGRAMMORPPRINCIPLES i=3 j=7 (reverse)
GNIMRAMGORPPRINCIPLES i=4 j=6 (reverse)
GNIMMARGORPPRINCIPLES i=5 j=5 (reverse)
GNIMMARGORPSRINCIPLEP i=12 j=19 (reverse)
GNIMMARGORPSEINCIPLRP i=13 j=18 (reverse)
GNIMMARGORPSELNCIPIRP i=14 j=17 (reverse)
GNIMMARGORPSELPCINIRP i=15 j=16 (reverse)
GNIMMARGORPSELPICNIRP i=16 j=15 (reverse)
PNIMMARGORPSELPICNIRG i=1 j=19 (reverse)
PRIMMARGORPSELPICNING i=2 j=18 (reverse)
PRIMMARGORPSELPICNING i=3 j=17 (reverse)
PRINMARGORPSELPICMING i=4 j=16 (reverse)
PRINCARGORPSELPIMMING i=5 j=15 (reverse)
PRINCIRGORPSELPAMMING i=6 j=14 (reverse)
PRINCIPGORPSELRAMMING i=7 j=13 (reverse)
PRINCIPLORPSEGRAMMING i=8 j=12 (reverse)
PRINCIPLERPSOGRAMMING i=9 j=11 (reverse)
PRINCIPLESPROGRAMMING i=10 j=10 (reverse)
PRINCIPLESPROGRAMMING

Impressions

Recommended Posts

[Algorithme de langage C] bloquer le mouvement
[Algorithme de langage C] Endianness
[Algorithme de langage C] arbre de recherche binaire
[Algorithme de langage C] Notation Postfix (ou notation polonaise inversée)
File d'attente ALDS1_3_B langage C
Intégration du langage machine en langage C
Recherche binaire ALDS1_4_B langage C
Tri de tas fait en langage C
[Langage C] readdir () vs readdir_r ()
Recherche linéaire ALDS1_4_A en langage C
Test de module multi-instance en langage C
Pointeur de fonction et objdump ~ Langage C ~
Réaliser une classe d'interface en langage C
Ecriture du langage C avec Sympy (métaprogrammation)
Langage de programmation C à haute efficacité énergétique
Introduction à Protobuf-c (langage C ⇔ Python)
[Traitement du langage 100 coups 2020] Chapitre 1: Mouvement préparatoire
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
Langage C 8 reine résolution de problèmes 3 modèles
Segfo avec 16 caractères en langage C
Appeler le langage C depuis Python (python.h)