Ir ao conteúdo

Posts recomendados

Postado

Olá, preciso de ajuda pelo amor de Deus de alguém para me ajudar a resolver um exercício em C usando pilha e se puder me explicar a maneira mais fácil de entender a resolvê-lo?

A lógica do meu código está muito errada provavelmente, mesmo assim irei colocar ele para analisarem. Obrigado!!!

Segue o problema: https://www.urionlinejudge.com.br/judge/pt/problems/view/1944

 

.Main

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include "pilha.h"
int main()
{
    setlocale(LC_ALL, "Portuguese");
    Pilha p = Cria_pilha();
    char sequencia[100], comparar[100],comparar2[100], comparar3[100], comparar4[100];
    int i = 0;
    int opc = 0;
    int retorno = 0;
    int premio = 0;
    char fixa[4] = {'E','C','A','F'};
    printf("MARATONA DE PROGRAMAÇÃO");
    do
    {
        if ((E_vazia) == 1)
        {
            for (i=0; i<strlen(fixa); i++)
            {
                comparar = Push(p, fixa);
               // comparar = fixa;
            }
            printf("\nDigite a sequência de 4 letras a ser inserida: ");
            fflush(stdin);
            gets(sequencia);
            for (i=0; i<4; i++)
            {
                comparar2 = Push(p, sequencia);
            }
            if (strcmp (comparar, comparar2) == 0)
            {
                premio++;
                for (i=0; i<4; i++)
                {
                    comparar = Pop(p);
                }
            }
            else
            {
                for (i=0; i<4; i++)
                {
                    comparar = comparar2;
                }
            }
            printf("\nNúmero de Prémios: %d",premio);
        }
        else
        {
            {
                printf("\nDigite a sequência de 4 letras a ser inserida: ");
                fflush(stdin);
                gets(sequencia);
            }
            for (i=0; i<4; i++)
            {
                comparar2 = Pop(p);
            }
            for (i=0; i<4; i++)
            {
                comparar3 = comparar2;
            }
            if (strcmp (comparar2, comparar3) == 0)
            {
                premio++;
            }
            printf("Número de Prémios: %d",premio);
        }
        printf("\nDeseja inserir mais equipes? Digite 1 para sim e 0 para não: ");
        scanf("%d",&opc);

    }
    while(opc == 1);
    return 0;
}
 

.H

 

#ifndef PILHA_H_INCLUDED
#define PILHA_H_INCLUDED

#define MAX 100

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

struct pilha {
               int pilha[MAX];
               int topo;
              };
typedef struct pilha* Pilha;


int E_cheia(Pilha Ptp);
int E_vazia(Pilha Ptp);
Pilha Cria_pilha();
int Push(Pilha Ptp, int elem);
int Pop(Pilha Ptp);
int Top(Pilha Ptp);
void Libera_pilha(Pilha Ptp);


#endif // PILHA_H_INCLUDED
 

.C

 

#include "pilha.h"

Pilha Cria_pilha()
{
    Pilha Ptp;

    Ptp = (struct pilha*)malloc(sizeof(struct pilha));

    Ptp->topo = -1;

    return Ptp;
}

int E_cheia(Pilha Ptp)
{
    if (Ptp->topo == MAX-1)
        return 1;
    else
        return 0;
}

int E_vazia(Pilha Ptp)
{
    if (Ptp->topo == -1)
        return 1;
    else
        return 0;
}

int Top(Pilha Ptp)
{
    if (Ptp->topo == -1)
        return -1;
    else
        return Ptp->pilha[Ptp->topo];
}

int Push(Pilha Ptp, int elem)
{
    if (E_cheia(Ptp) == 1)
        return 0;
    else
    {
        (Ptp->topo)++;
        Ptp->pilha[Ptp->topo] = elem;
        return 1;
    }
}

int Pop(Pilha Ptp)
{
    int elem;
    if (E_vazia(Ptp) == 1)
        return -1;
    else
    {
        elem = Ptp->pilha[Ptp->topo];
        (Ptp->topo)--;
        return elem;
    }
}


 

  • Curtir 1
Postado

@Péssimo em Programar    você quer o código ou tem que ser com pilha ? ,  

   um código que funciona mas não com pilha  seria assim  :

#include <stdio.h>

char arr[99999] = { 'F', 'A', 'C', 'E' };

int main(int argc, char const *argv[]) {
	int n, s = 0, t = 4;
	char r1[2], r2[2], r3[2], r4[2];
	
	scanf("%d", &n);
	for (int i = 0; i < n; ++i) {
		scanf("%s%s%s%s", r1, r2, r3, r4);
		if (r1[0] == arr[t-1] && r2[0] == arr[t-2] && r3[0] == arr[t-3] && r4[0] == arr[t-4]) {
			t -= 4;
			if (t == 0)
				arr[0] = 'F', arr[1] = 'A', arr[2] = 'C', arr[3] = 'E', t = 4;
			s++;
		} else {
			arr[t] = r1[0], t++, arr[t] = r2[0], t++, arr[t] = r3[0], t++, arr[t] = r4[0], t++;
		}
	}
	
	printf("%d\n", s);
	return 0;
}

 

  • Curtir 1

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!