Ir ao conteúdo
  • Cadastre-se

C++ Diamantes e areia - 1069 uri


VB_boita

Posts recomendados

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

struct EST_PILHA
{
	int TOPO;
	char INFO[1000];
};

struct EST_PILHA Cria (void)
{
	struct EST_PILHA P;
	P.TOPO = 0;
	return P;
}

struct EST_PILHA PUSH(int Valor, struct EST_PILHA P)
{
	P.TOPO++;
	P.INFO[P.TOPO] = Valor;
	return P;
}

char POP(struct EST_PILHA *P)
{
	char Valor;
	Valor = (*P).INFO [(*P).TOPO];
	(*P).TOPO--;
	return Valor;
}

void ExibirPilha(struct EST_PILHA P, int var1,int var2)
{
	if(var1 == var2)
	{
		printf("%d",var1);	
	}
	else if(var1 > var2)
	{
		printf("%d",var2);	
	}
	else if(var2 < var1)
	{
		printf("%d",var1);	
	}
	else
	{
		printf("Invalido.\n");
	}
}

int main()
{
	int i=0,var1=0,var2=0;
	char N[1000];
	struct EST_PILHA Pilha;
	
	Pilha = Cria();
	scanf("%s",N);
	
	for(i=0; N[i]!= '\0'; i++)
	{
		
		if(N[i] == '<')
		{
			Pilha = PUSH('<',Pilha);
			var1++;
		}
		else if(N[i] == '>')
		{
			N[Pilha.TOPO] = POP(&Pilha);
			var2++;
		}
		else
		{
			N[Pilha.TOPO] = POP(&Pilha);
		}
		
	}	
	
	ExibirPilha(Pilha,var1,var2);
	
	return 0;		  		
}

Diamantes e Areia: João está trabalhando em uma mina, tentando retirar o máximo que consegue de diamantes "<>". Ele deve excluir todas as particulas de areia "." do processo e a cada retirada de diamante, novos diamantes poderão se formar. Se ele tem como uma entrada .<...<<..>>....>....>>>., três diamantes são formados. O primeiro é retirado de <..>, resultando  .<...<>....>....>>>. Em seguida o segundo diamante é retirado, restando .<.......>....>>>. O terceiro diamante é então retirado, restando no final .....>>>., sem possibilidade de extração de novo diamante.

Entrada

Deve ser lido um valor inteiro N que representa a quantidade de casos de teste. Cada linha a seguir é um caso de teste que contém até 1000 caracteres, incluindo "<,>, ."

Saída

Você deve imprimir a quantidade de diamantes possíveis de serem extraídos em cada caso de entrada.

OBS – Deve ser utilizado pilha.

 

Eu fiz o codigo mas não esta dando certo. Quando eu coloco >< ele também conta como um diamante

Se alguém puder me ajudar.

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@VB_boita     fazendo uma redução nesse seu código , ficou assim  :

#include <cstdio>
#include <cstring>
int main ()
{
  int q, w, guaxima, greater, liryus;
  char lista[1001];

  scanf("%d", &q);

  while (q--) 
  {
    scanf("%s", lista);
    guaxima = greater = liryus =  0;
    for (w=0; w<strlen(lista); w++) 
    {
      if (lista[w] == '<') 
      {
        guaxima++;
      } 
      else 
        if (lista[w] == '>') 
        {
          if (guaxima > 0) 
          {
            liryus++;
            guaxima--;
          }
        }
    }
    printf("%d\n", liryus);
  }
  return 32768;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

13 horas atrás, VB_boita disse:

 

Eu fiz o codigo mas não esta dando certo. Quando eu coloco >< ele também conta como um diamante

Se alguém puder me ajudar.

 

Está desempilhando não somente quando ver (>) sem a distinção.

O fato, se o sinal de desempilhar aparece e desempilha com sucesso então tem +1 diamante, mas nesse caso se empilha e desempilha respectivamente para < e >.

"

 

Por último, o vetor para a sequência de caracteres tem capacidade de 1001, com já exemplificado, porque o caractere nulo não faz  parte o tamanho da ‘string’.

"

 

 

  • Curtir 2
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...