/* * Função Josephus */ SLista* executaJosephus(SLista* lista, int quantidade) { int i, num_soldado, num_iteracoes; // Verifica se o circulo esta vazio if (verificaCircVazio(lista)) { printf("\n[-] Ops! Círculo esta vazio.\n"); return lista; } // Verifica se há apenas um soldado na lista if (quantidade == 1) { printf("\n[!] Soldado escolhido: %s\n", lista->nome); return lista; } num_iteracoes = rand() % 20; num_soldado = rand() % quantidade; SLista* aux = lista; printf("Quantidade de soldados: %d\n\n", quantidade); imprimeSoldadosCirc(lista); printf("\nSorteando o soldado para iniciar a contagem...\nSorteado %da posição.\n", num_soldado + 1); // O soldado sorteado vai ser a X iteração do número sorteado for (i = 0; i < num_soldado; i++) aux = aux->prox; printf("Soldado inicial: %s\nNum. de iterações na adedanha: %d\n", aux->nome, num_iteracoes); // Percorre a lista X vezes a partir do soldado sorteado e elimina um soldado da lista for (i = 0; i < num_iteracoes; i++) aux = aux->prox; printf("Soldado eliminado: %s\n", aux->nome); lista = remove_soldado(lista, aux); printf("\n-----------------------------------------\n"); return executaJosephus(lista, quantidade - 1); }
int main(void) { TListaCirc *listaC; listaC = inicializa(); listaC = insereSoldadoNoCirc(listaC, "BATMAN"); listaC = insereSoldadoNoCirc(listaC, "SPIDERMAN"); listaC = insereSoldadoNoCirc(listaC, "SUPERMAN"); listaC = insereSoldadoNoCirc(listaC, "IRONMAN"); listaC = insereSoldadoNoCirc(listaC, "WONDER WOMAN"); listaC = insereSoldadoNoCirc(listaC, "CAPTAIN AMERICA"); listaC = insereSoldadoNoCirc(listaC, "GREEN LANTERN"); listaC = insereSoldadoNoCirc(listaC, "HULK"); printf("Soldados\n"); printf("-------------------------\n"); imprimeSoldadosCirc(listaC); printf("Quantidade de Soldados: %d\n", verificaQteSoldados(listaC)); printf("-------------------------\n"); executaJosephus(listaC); return EXIT_SUCCESS; }
int main(void) { // ======================= // Inserção de soldados // ======================= // Escolhe um número srand(time(0)); // Declaração de variáveis int i; SLista* listax = inicializa(); // Propósito de testes char nomes[5][20] = { "Joao", "Arthur", "Davi", "Joaquim", "Eduardo" }; // Insere os 5 soldados na lista // e imprime a lista com os soldados inseridos. for (i = 0; i < 5; i++) listax = insereSoldadoNoCirc(listax, nomes[i], (i+1)); // Quantidade de soldados na lista int quantidade = verificaQteSoldados(listax); //printf("\nQuantidade de Soldados: %d\n\n", quantidade); // ======================= // Execução de Josephus // ======================= listax = executaJosephus(listax, quantidade); // Imprime printf("\nSoldado a executar a tarefa:\n"); imprimeSoldadosCirc(listax); return EXIT_SUCCESS; }