Ir ao conteúdo
  • Cadastre-se

diogo moura

Membro Pleno
  • Posts

    45
  • Cadastrado em

  • Última visita

Tudo que diogo moura postou

  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. @giu_d nossa muito obrigado mesmo, já faz um bom tempo que procuro material, muito obrigado mesmo
  3. @giu_d Boa tarde, esse material é muito bom, poderia me passar o link do site onde você baixou
  4. Bom estou começando meus estudos em estrutura de dados, e está um pouco complicado achar material em ordem, alguém poderia me indicar um livro (PDF), ou um site que siga uma ordem lógica dos assuntos, obrigado desde já
  5. 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; }
  6. Fiz o que mandou só que não apareceu nenhum valor@isrnick, desculpe se estou sendo meio difícil de entender a sua solução
  7. @isrnick me perdoe se eu estiver falando bobagem, mas por exemplo o número 4 possui os divisores 1 2 4, o no seu código só aparece 2 2 2, você poderia me explicar melhor o código
  8. #include <stdio.h> int main() { int n=4, cont=0,i; for(i=1;i<=4;i++) { if(n%i==0) { cont++; } } printf("%d", cont); } Esse é a forma que eu conheço tem outra maneira mais eficiente que essa ?
  9. Muito obrigado agora minhas dúvidas foram esclarecidas
  10. 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; }
  11. 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
  12. 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; }
  13. 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; }
  14. 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)); }
  15. Olha @AnsiC , fiz o que você pediu porém ainda estou levando 60% de erro
  16. @foxjin23 Em c ficaria desse jeito #include <stdio.h> #include <math.h> int somatorio(int num); int main(int argc, char** argv) { int n; scanf("%d", &n); printf("%d\n",somatorio(n)); return 0; } int somatorio(int num) { int soma = 0; for(int i = 0; i < num; i++) { soma += ((pow(i, 2)) / (i + 3)); } return soma; }
  17. 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; } }
  18. 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; }
  19. 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: 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; }
  20. @devair1010 olá é 2693, desculpa demora estava com internet muito ruim
  21. @Mauro Britivaldo olá eu vi que se subtrair -48, transformaria em inteiro, o sprintf, deu certo
  22. 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 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);

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