Ir ao conteúdo
  • Cadastre-se
Péssimo em Programar

C URI 1944 - Código em C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×