Skip to content

Instantly share code, notes, and snippets.

@Bruno02468
Last active November 4, 2018 22:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Bruno02468/fad714f184662a07c64ccb20510c0eda to your computer and use it in GitHub Desktop.
Save Bruno02468/fad714f184662a07c64ccb20510c0eda to your computer and use it in GitHub Desktop.
[EP3] Testar todas as permutações de n panquecas!
/* pra ajudar meus bacanos da comp ~ borges */
#include <stdio.h>
#include <stdlib.h>
/* VOCÊ NÃO PODE IMPORTAR ESSE TRECO NO OFICIAL! */
#include <string.h>
/* INSIRA SUAS FUNÇÕES AQUI! PREENCHA A FUNÇÃO ordena()! */
int ordena(int *panquecas, int num_panquecas) {
/* ... */
}
/* FIM DAS SUAS FUNÇÕES */
/* função de utilidade, printa uma array */
void printar_array(int *arr, int n) {
int i;
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
int *pior, max = 0;
/* essa função chama a sua função de ordenar para todas as permutações
* permutação baseada no algoritmo de embaralhamento de Fisher-Yates */
void permutar(int *arr, int i, int n) {
int j, *copia, z;
if (n == i) {
copia = malloc(n*sizeof(int));
memcpy(copia, arr, n*sizeof(int));
/* AQUI VOCÊ CHAMA SUA FUNÇÃO DE ORDENAR! */
/* EU ASSUMI QUE ELA RETORNA UM INT COM O NÚMERO DE FLIPS! */
z = ordena(copia, n);
/* se você quiser que ele só imprima os "novos piores casos",
* mova os dois comandos abaixo, e o "\n" logo após para dentro do if! */
printar_array(arr, n);
printf("exigiu %d flips.", z);
if (z > max) {
memcpy(pior, arr, n*sizeof(int));
printf(" (novo pior caso)");
max = z;
}
/* mova esse cara para dentro do if também se quiser só imprimir
* os "novos piores casos" */
printf("\n");
free(copia);
} else {
for (j = i; j < n; j++) {
swap(arr, i, j);
permutar(arr, i + 1, n);
swap(arr, i, j);
}
}
}
int main() {
int n, *panquecas, i;
/* ler o número de panquecas */
scanf("%d", &n);
/* alocar a lista de panquecas e preencher */
panquecas = malloc(n*sizeof(int));
for (i = 1; i <= n; i++) {
panquecas[i-1] = i;
}
printf("\n");
pior = malloc(n*sizeof(int));
permutar(panquecas, 0, n);
printf("\nmáximo de flips exigidos foi %d.\nexemplo: ", max);
printar_array(pior, n);
printf("\n");
free(pior);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment