Exemple #1
0
/*
 * 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;
}
Exemple #3
0
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;
}