Ir ao conteúdo
  • Cadastre-se

diogo moura

Membro Pleno
  • Posts

    45
  • Cadastrado em

  • Última visita

posts postados por diogo moura

  1. #include <stdio.h>
    
    int div(int numero);
    
    int main(int argc, char** argv)
    {
        int teste, n, divisores, i;
        scanf("%d", &teste);
        while(teste--)
        {
            scanf("%d", &n);
            for(i = 1; i <= 1000000; i++)
            {
                divisores = div(i);
                if(divisores == n)
                {
                    printf("%d\n", i);
                    break;
                }
            }
        }
        return 0;
    }
    
    int div(int numero)
    {
        int i, c = 0;
        for (i = 1; i * i <= numero; ++i)
        {
            if (numero % i) continue;
            c++;
            if ((numero / i) == i) continue;
            c++;
        }
        return c;
    }

    Bom a questão dá o número de divisores e quer o menor número que tem esses divisores por exemplo 4 divisores o número é 6, só o que meu algoritmo é muito lento, como otimizar ?

  2. A maneira que eu pensei foi se achar o número ele substituído por um número negativo, mas queria remover o elemento totalmente do vetor

    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char** argv)
    {
      int vetor[] = {1, 2, 3, 4, 5}, i;
      int remove_num = 5;
      int tam = 5;
      for(i = 0; i < tam; i++)
      {
        if(vetor[i] == remove_num)
        {
            vetor[i] = -1;
        }
     }
     for(i = 0; i < tam; i++)
     {
        if(vetor[i] >= 0)
        {
            printf("%d\n", vetor[i]);
        }
     }
       return 0;
    }

     

  3. Não sou muito bom com ponteiro, porém meu professor mostrou um código e até agora não entendi por que a função retornou um vetor com os valores alterados

    #include <stdio.h>
    #include <stdlib.h>
    
    int *funcao(int vetor[]);
    
    int main(int argc, char** argv)
    {
    	int vetor[10], *ptr;
    	for(int i = 0; i < 10; i++)
    	{
    		scanf("%d", &vetor[i]);
    	}
    	ptr = funcao(vetor);
    	for(int i = 0; i < 10; i++)
    	{
    		printf("%3d",ptr[i]);
    	}
    	printf("\n");
    	return 0;
    }
    
    int *funcao(int vetor[])
    {
    	int *n;
    	n = (int*)malloc(sizeof(int) * 10);
    	for(int i = 0; i < 10; i++)
    	{
    		n[i] = vetor[i] * 2;
    	}
    	return n;
    }

     

  4. Seria assim ? @Boko Moko

    #include <stdio.h>
    #include <string.h>
    
    struct pessoas
    {
    	char nome[100];
    	int nota;
    };
    
    
    int main(int argc, char** argv)
    {
    	struct pessoas pessoa[100];
    	int teste, aux;
    	char a[100];
    	scanf("%d", &teste);
    
    	for(int i = 0; i < teste; i++)
    	{
    		scanf("%s %d", pessoa[i].nome, &pessoa[i].nota);
    	}
    
    
    	for(int i = 0; i < teste; i++)
    	{
    		for(int j = i + 1; j < teste; j++)
    		{
    			if(pessoa[i].nota == pessoa[j].nota)
    			{
    				if(strcmp(pessoa[i].nome, pessoa[j].nome) == 1)
    				{
    					strcpy(a, pessoa[i].nome);
    					strcpy(pessoa[i].nome, pessoa[j].nome);
    					strcpy(pessoa[i].nome, a);
    				}
    			}
    			else if(pessoa[i].nota > pessoa[j].nota)
    			{
    				aux = pessoa[i].nota;
    				pessoa[i].nota = pessoa[j].nota;
    				pessoa[j].nota = aux;
    			}
    		}
    	}
    
    	for(int i = 0; i < teste; i++)
    	{
    		printf("%s  %d\n", pessoa[i].nome, pessoa[i].nota);
    	}
    	return 0;
    }

    , acho que não deu certo 

    • Amei 1
  5. A questão pede que leia nome(sem espaço) e numero(inteiro) e se ordenado pelo numero e caso o número fosse igual seria ordenado por ordem alfabética, tentei fazer mas não consegui

     

    O meu código

     

    #include <stdio.h>
    #include <string.h>
    
    struct pessoas
    {
    	char nome[100];
    	int nota;
    };
    
    
    int main(int argc, char** argv)
    {
    	struct pessoas pessoa[100];
    	int teste, aux;
    	char a[100];
    	scanf("%d", &teste);
    
    	for(int i = 0; i < teste; i++)
    	{
    		scanf("%s %d", pessoa[i].nome, &pessoa[i].nota);
    	}
    
    
    	for(int i = 0; i < teste; i++)
    	{
    		for(int j = i + 1; j < teste; j++)
    		{
    			if(pessoa[i].nota == pessoa[j].nota)
    			{
    				strcpy(a, pessoa[i].nome);
    				strcpy(pessoa[i].nome, pessoa[j].nome);
    				strcpy(pessoa[i].nome, a);
    			}
    			else if(pessoa[i].nota > pessoa[i].nota)
    			{
    				aux = pessoa[i].nota;
    				pessoa[i].nota = pessoa[j].nota;
    				pessoa[j].nota = aux;
    			}
    		}
    	}
    	
    	for(int i = 0; i < teste; i++)
    	{
    		printf("%s  %d\n",pessoa[i].nome,pessoa[i].nota);
    	}
    	return 0;
    }

       

    • Curtir 1
  6. Estou fazendo uma questão que pede para eu retirar apenas os números da frase, o meu código só consegue pegar os números com frases pequenas, Exemplo de frase que o meu código falha, esse caso de teste por ser muito grande o código não vai conseguir retirar o número 100, teria uma função para isso ?

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    int main(int argc, char** argv)
    {
    	char nome[] = {"esse vai passar 900"}, aux[101];
    	int cont = 0, tam = strlen(nome);
    	int indice = 0;
    	for(int i = 0; i < tam; i++)
    	{
    		if(isdigit(nome[i]))
    		{
    			indice = i;
    			break;
    		}
    	}
    	for(int i = indice; i < tam; i++)
    	{
    		aux[cont] = nome[i];
    		cont++;
    	}
    	aux[cont] = '\0';
    	puts(aux);
    	return 0;
    }

     

    • Amei 1
  7. Bom estou fazendo a Questão 2729 do uri, que pede para ordenar em ordem alfabética e eliminar os nomes repetidos , já tentei varias entradas e o resultado sai o resultado certo que a questão pede, alguém poderia colocar algum caso que meu código não passe

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int ordena(const void *a, const void *b);
    
    int main(int argc, char** argv)
    {
    	char vetor_nomes[1700][100], nome[1000000], *ponteiro, auxiliar[1700][100];
    	int teste, cont1, cont2;
    	scanf("%d", &teste);
    	while(teste--)
    	{
    		getchar();
    		scanf("%[^\n]", nome);
    		cont1 = 0, cont2 = 0;
    		ponteiro = strtok(nome, " ");
    		while(ponteiro != NULL)
    		{
    			strcpy(vetor_nomes[cont1], ponteiro);
    			cont1++;
    			ponteiro = strtok(NULL, " ");
    		}
    		qsort((void*)vetor_nomes, cont1, sizeof(vetor_nomes[0]), ordena);
    		for(int i = 0; i < cont1; i++)
    		{
    			if(!strcmp(vetor_nomes[i], vetor_nomes[i + 1]) == 0)
    			{
    				strcpy(auxiliar[cont2], vetor_nomes[i]);
    				cont2++;
    			}
    		}
    		printf("%s", auxiliar[0]);
    		for(int i = 1; i < cont2; i++)
    		{
    			printf(" %s", auxiliar[i]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    int ordena(const void *a, const void *b)
    {
    	return (strcmp((char *)a, (char *)b));
    }

     

    • Curtir 1
  8. Bom estou fazendo a questão 1199 Conversão de bases do uri porém em alguns casos o meu teste passou, só que quando eu coloquei um número que o pessoal colocou no fórum deu erro, o número foi 0x80000000 o resultado esperado é 2147483648, só que meu código imprime -2147483648, já tentei multiplicar por -1 e o resultado continua negativo, alguém poderia me ajudar

    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    char saber_o_tipo(char *numero);
    
    int main(int argc, char** argv)
    {
       char *numero;
       numero = (char*)malloc(sizeof(char) * 1000000);
       int resposta, valor;
       while(1)
       {
         scanf("%s", numero);
         if(numero[0] == '-')
         {
            break;
         }
         resposta = saber_o_tipo(numero);
         if(resposta > 0)
         {
            sscanf(numero, "%x", &valor);
            if(valor < 0)
            {
                printf("%d\n", valor*-1);
            }
            else
            {
                printf("%d\n", valor);
            }
         }
         else
         {
            sscanf(numero, "%d", &valor);
            printf("Ox%X\n", valor);
         }
     }
      free(numero);
      return 0;
    }
    
    char saber_o_tipo(char *numero)
    {
      int i, contador = 0, tamanho;
      tamanho = strlen(numero);
      for(i = 0; i < tamanho; i++)
      {
         if(isalpha(numero[i]))
         {
            contador++;
         }
      }
      if(contador > 0)
      {
         return 1;
      }
      else
      {
         return 0;
      }
    }

    5ac275037fa8c_questo.thumb.png.539f369e613f19f7ef9aad7704873467.png

    • Curtir 1
  9. Testei as entradas que a questão deu, os resultados batem, porém o uri só me retorna 100% de erro alguém poderia me ajudar, Link da questão

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    int main(int argc, char** argv)
    {
    	char nome[1000000], aux[1000000];
    	int c = 0, teste;
    	scanf("%d", &teste);
    	for(int j = 0; j < teste; j++)
    	{
    		getchar();
    		scanf("%[^\n]", nome);
    		
    		for(int i = 0; i < strlen(nome); i++)
    		{
    			if((isupper(nome[i])) || (islower(nome[i])))
    			{
    				nome[i] += 3;
    			}
    			else
    			{
    				nome[i] = nome[i];
    			}
    		}
    		
    		for(int i = strlen(nome) - 1; i >= 0 ; i--)
    		{
    			aux[c++] = nome[i];
    		}
    		aux[c] = '\0';
    		int tam = strlen(nome);
    		
    		tam /= 2;
    		for(int i = tam; i < strlen(nome); i++)
    		{
    			aux[i] -= 1;
    		}
    		puts(aux);
    		c = 0;
    		memset(aux, 0, sizeof(aux));
    	}
    	return 0;
    }

     

    • Curtir 1
  10. Bom estou fazendo uma questão que se precisa retirar os zeros de uma palavra, eu consegui até ai o problema é que se palavra for 100 ele vai printar só 1 por que eu retirei os zeros, que vai estar errado, vou colocar o link da questão pra vocês entenderem melhor.

     

    Tela do link:

    tela_link.jpg

     

     Link da questão: URI 2714. 

     

    Código atual:

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    int main(int argc, char** argv)
    {
    	char senha[80];
    	int teste;
    	scanf("%d", &teste);
    	for(int i = 0; i < teste; i++)
    	{
    		scanf("%s", senha);
    		if(strlen(senha) == 20)
    		{
    			if(isupper(senha[0]) && isupper(senha[1]))
    			{
    				for(int j = 0; j < strlen(senha); j++)
    				{
    					if(senha[j] != '0' && senha[j] != 'R' && senha[j] != 'A')
    					{
    						printf("%c", senha[j]);
    					}
    				}
    				printf("\n");
    			}
    			else
    			{
    				printf("INVALID DATA\n");
    			}
    		}
    		else
    		{
    			printf("INVALID DATA\n");
    		}
    	}
    	return 0;
    }

     

    • Curtir 1
  11. Olá @Mauro Britivaldo 

    Perdão eu me confundi na hora de digitar era de inteiro para string

    A questão pede pra soma os números dentro da string

     

    uri.png.67e91e52a78a5ad1ef57569116fa3837.png

     

    Eu consegui achar o resultado utilizando a função atoia, só que não foi aceito

     

    Parte do código que eu fiz as conversões

     

    n1 = nome[2] - 48; /*transformei os dois numeros para interios*/
    n2 = nome[3] - 48;
    itoa(n1, p1, 10);  /*converti para string*/
    itoa(n2, p2, 10);  /* Só que parece o itoa não está mais sendo utilizado*/
    strcpy(final, p1); /*E concatenei eles*/
    strcat(final, p2);
    n1 = atoi(final); /*Por fim tranformei ele novamente em inteiro*/
    printf("%d\n", n1);

     

    • Curtir 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!