Solução: Problema da moda - dificuldade 4 (Lúcio Ribeiro)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
// Lúcio Ribeiro
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
int main()
{
	char **vet=NULL;
	char *palavra=NULL;
	int k,linha=0,moda=1,cont=1, i,j;
 
	do /*ler e alocar*/
	{
		scanf("%d",&k);
		palavra = (char *) realloc(palavra, sizeof(char)*(k+1));
		if(palavra==NULL)
			{ puts(":P\n"); exit(1);}
		scanf("%s",palavra);
		if(strcmp(palavra,"0")==0)
			break;
		else
			{
				linha++;
				vet = (char **) realloc(vet, sizeof(char*)*linha);
				*(vet+linha-1) = (char*) malloc(sizeof(char)*(k+1));
				if(vet==NULL||*(vet+linha-1)==NULL)
					{ puts(":P\n"); exit(1);}
				for(i=0;i<(k+1);i++)
					*(*(vet+linha-1)+i) = palavra[i];
			}
	}while(1);
 
	if(linha==1)/*importantissimo*/
	{
		printf("%s",*vet);
		return 0;
	}
 
	for(i=0;i<linha;i++) /*ordenar*/
	{
		for(j=i+1;j<linha;j++)
		{
			if(strcmp(*(vet+i),*(vet+j))>0)
				{
					palavra = (char *) realloc(palavra, sizeof(char)*(strlen(*(vet+i))+1));
					strcpy(palavra, *(vet+i));
					*(vet+i) = (char*) realloc(*(vet+i),sizeof(char)*(strlen(*(vet+j))+1));
					strcpy(*(vet+i), *(vet+j));
					*(vet+j) = (char*) realloc(*(vet+j),sizeof(char)*(strlen(palavra)+1));
					strcpy(*(vet+j), palavra);
				}
		}
	}
 
	j=1;
	for(i=1;i<linha;i++)/*j eh parcial*/
	{
		if(!strcmp(*(vet+i),*(vet+i-1)))
			j++;
		else j=1;
		if(j>moda)
				moda=j;
	}
 
	for(i=1;i<linha;i++)
	{
		if(!strcmp(*(vet+i),*(vet+i-1)))
			cont++;
		else
			cont=1;
		if(cont==moda)
			printf("%s\n",*(vet+i));
	}
	free(vet);
	return 0;
}