Ir ao conteúdo
  • Cadastre-se

C salto com lista circular


Mazze

Posts recomendados

Boa noite pessoal, estou precisando de ajuda com um trabalho.

Seguinte:

O programa deve receber 3 variáveis de entrada

m= número total de pessoas, p= posição da pessoa escolhida, n= numero de saltos.

a pessoa que está na posição onde o salto cai morre, o programa deve rodar até ter apenas 1 sobrevivente.

no final deve ser exibido MORTO e o número do sobrevivente caso o salto caia na posição escolhida e VIVO caso não caia.

 

Fiz um código mas não está totalmente certo, o problema é que o programa deve continuar rodando até ter apenas um sobrevivente, e a cada rodada deve ser eliminado os numeros que 'morrem', não estou conseguindo fazer isso só com contador e vetor. Pensei em implementar com uma lista circular mas não sei como fazer, alguem pode ajudar?

Caso seja necessário estou anexando o exercício e uma imagem para melhor entendimento.

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

int main (){
	
	int m, p, n,i, morre, score,sobrevive, j=0;
	
	scanf("%d %d %d",&m , &p, &n);

	int vet[m];
		for(i=1;i<=m;i++){
			vet[i]=i;
		}
		morre=vet[n+1];
		i=1;
		for(j=0;j<m;j++){
				if(i>m){
					i=i-m;
					morre = vet[i];
				}
				if(morre==p){
					score=1;
					sobrevive=vet[i--];	
				}
				i=i+n;
				morre = vet[i];		
			}
	
	if(score==1){
		printf("MORTO \n");
	}else{
		printf("VIVO");
	}

}

 

 

Massada (1).pdf

massada.png

Link para o comentário
Compartilhar em outros sites

Vi isso no outro tópico, com o usuário usando listas ligadas. Mas tal usuário não postou o enunciado e agora fica bem mais claro. Lógico que é possível usar listas, mas partindo do enunciado não parece ser vantagem alguma.

 

Eu usaria um simples vetor de estruturas de tamanho M onde os dados seriam um mínimo: o status e a identificação, tipo o nome ou o número dos caras.

 

A partir da posição P no vetor de tamanho M e no próprio estilo Highlander --- "no final só pode haver um" --- você faz o salto considerando o comprimento N e fuzila o infeliz que está na posição. Marca o que se foi e continua saltando até ter apenas um vivo

 

E pronto. Claro que o salto de comprimento N seria entre os vivos nas M células, considerando algo como o loop abaixo. Não é complexo.

 

Não precisa de uma lista circular. Nesse loop

for (int= 0 ;; X= (+ 1 ) % M)
{
    // X vai ser 0,1,2,3...(M-1), 0,1...
}

a matemática faz exatamente isso com X. E o ;; quer dizer que o for não termina e você sai com break quando só tiver um vivo...

 

:) Highlander é um filme sobre guerreiros imortais que vivam até duelos entre eles ao final dos quais só restava um...

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...