Ir ao conteúdo
  • Cadastre-se

VisualG Algoritmo URI online 1968, Terra Desconhecida


Posts recomendados

Estou tentando resolver o exercício 1968 (A terra desconhecida) do URI online judge, mal consigo sair do início, até agora o que consegui fazer inserir as variáveis (rsrs). Preciso de ajuda pelo menos para entender um pouco mais do exercício, por favor.

Obs: Pelo que eu entendi eu vou ter que descobrir quais números entre os números inseridos apresentam n divisores (ex: 2 divisores), então multiplicar a quantidade de números que supre essa condição por "n" (A quantidade de divisores estabelecidas pelo usuário) para poder achar as possibilidades de formação de grupo, onde os cidadão estão enumerados de A a B e a quantidade de grupos e obtida através de quantos líderes há. Os líderes são determinados pelo seu número, caso ele tenha n divisores. Aqui um pouco do que já fiz:

Var
// Seção de Declarações das variáveis 
a,b,n: inteiro
poss: real
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 
escreval("os baobás começaram a crescer e tomaram conta da Terra Desconhecida.")
escreval("Agora, os cidadãos precisam se mudar urgentemente. Para auxiliar na")
escreval("evacuação, todos os cidadãos foram numerados de A a B . Para definir")
escreval("quem seriam os líderes dos grupos durante a evacuação, alguém sugeriu")
escreval("que os líderes deveriam ser todos aqueles que houvessem recebido um")
escreval("número primo. Mas logo outra ideia surgiu: Um número primo é um número")
escreval("que possui exatamente 2 divisores. E se os líderes fossem aqueles que")
escreval("receberam um número com exatamente N divisores?")
escreval("Insira o número N escolhido pelos cidadãos:")
leia (N)
escreval("Os cidadãos foram enumerados de A a B,insira esses valores,respectivamente:")
leia (a,b)

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Samuel Barbosa Ramos.

 

Tente focar na base dos problemas... ir do mais simples para o mais complexo.

 

O segredo é fazer abstrações...

 

Qual o objetivo maior do problema?

Resp: A identificação de líderes.

 

Ok, mas como identifico os líderes?

Resp: Os líderes são aqueles que possuem um número com exatamente N divisores.

 

Certo, então como identifico a quantidade de divisores de um número?

Resp.: Aqui está o foco! Você precisa saber com faz isso.

 

Perceba que a necessidade básicas vem do mais simples... saímos do mais complexo em caminho de algo mais básico...

 

 

Então... seria mais ou menos o que você sugeriu:

Em 24/09/2017 às 12:41, Samuel Barbosa Ramos disse:

Obs: Pelo que eu entendi eu vou ter que descobrir quais números entre os números inseridos apresentam n divisores (ex: 2 divisores),

 

Para calcular os múltiplos de "N" números, é necessário saber calcular de 1 antes, correto?... Traduzindo,

 

Você focar em fazer inicialmente algo assim:

"Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

 

A base de conhecimento estaria encaminhada.. Depois, evolua o código para algo como:

"Faça um programa retorne o número de divisores de 10 números".

 

Perceba que executar para "10 números" também é uma base, se já fez isso para outra lógica qualquer, conseguirá adaptar para seu problema... Depois, algo como:

"Faça um programa retorne o número de divisores de uma faixa de números, ex.: 5 a 20".

 

Idem ao anterior, pereba que a "dificuldade maior" seria "achar a quantidade de divisores"... ir de "5 a 20" seria uma pequena diferença de 1 a 10...

 

 

Por ai vai... a depender da experiência, já daria para ir direto ao objetivo... mas sempre ter em mente que a base é tudo. Não tem como tentar aprender a correr antes de saber andar.

 

 

Veja que já sabendo calcular a quantidade de divisores, bastará verificar se essa quantidade é igual o valor desejado.

 

 

RESUMINDO

Sugiro que faça esse programa, para criar experiência:
"Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

 

Percebe que o problema proposto é isso acima, só que com mais firulas...

 

 

Posta o código aqui, e onde está com dúvidas.

 

 

 

No aguardo.

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

@Simon Viegas

Var
   // Seção de Declarações das variáveis
   n, cont: inteiro


Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreva ("Insira um número:")
   leia (n)
   para i de 1 ate n faca
      se n mod i = 0 então
         cont<-cont+1
      fimse
   fimpara
   escreval (cont)

Eu fiz o algoritmo que só descobre os divisores de um certo número, não consegui passar pra descobrir de vários números

Link para o comentário
Compartilhar em outros sites

@Simon Viegas Oi, refiz o código com algumas coisas mais que já imprime quantos números apresentam "n" divisores, meu problema agora está em achar as possibilidades de formação de grupo. Aqui o algoritmo:

 // Seção de Declarações das variáveis
   n1, n2,cont,i, di,j,cont2, poss : inteiro
   

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreva ("Insira o número de quantos divisores você quer:")
   leia (di)
   escreva ("Insira um número:")
   leia (n1)
   escreval("Insira outro número")
   leia(n2)
   para i de n1 ate n2 faca
      para j de 1 ate i faca
         se i mod j = 0 então
            cont<-cont+1
         fimse
      fimpara
      se cont >=di então
       escreval(i)
       cont <- 0
       cont2<-cont2+1
      fimse
   fimpara
   poss<-cont2*di
   escreva ("Há",poss," possibilidades")

 

*O cálculo de possibilidades não bate com os exemplos dado :(

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Samuel Barbosa Ramos.

 

Eu estava respondendo a postagem anterior agora... rs.

 

Vou reanalisar a sua nova resposta e jajá atualizo..

adicionado 7 minutos depois

Então, vamos lá:

 

Você está tentando resolver qual "problema"?

 

Pelo que eu entendo, a postagem anterior tentou fazer este:

Em 25/09/2017 às 18:16, Simon Viegas disse:

"Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

 

 

Daí, a próxima etapa seria fazer este...

Em 25/09/2017 às 18:16, Simon Viegas disse:

"Faça um programa retorne o número de divisores de 10 números".

 

Vá com calma...

 

 

Deixa esse seu código guardado e tente fazer esse etapa que falta, posta aqui o código para analisarmos ou onde está com dúvidas.

 

Obs.: Qual a versão do Visualg que está utilizando? sugiro que baixe a versão mais recente (3.6.0.5) e tente fazer o código nele.

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
32 minutos atrás, Samuel Barbosa Ramos disse:

@Simon Viegas O problema do algoritmo é descobrir a quantidade da possibilidade de formação de grupo, onde  as equipes são criadas a partir de um líder que é determinado caso tenho a quantidade n de divisores

 

Estamos tratando disso...!

 

 

A minha proposta é:

Em 25/09/2017 às 18:16, Simon Viegas disse:

ir do mais simples para o mais complexo.

 

 

Se você conseguir fazer a segunda etapa:

Em 25/09/2017 às 18:16, Simon Viegas disse:

"Faça um programa retorne o número de divisores de 10 números".

 

E depois fazer a terceira:

Em 25/09/2017 às 18:16, Simon Viegas disse:

"Faça um programa retorne o número de divisores de uma faixa de números, ex.: 5 a 20".

 

Conseguirá sem muita dificuldade resolver por completo o problema inicial.

 

O que eu quero dizer é que para resolver o seu problema, você terá que ser capas de fazer a terceira etapa (que por sua vez necessita da etapa dois... e este último da etapa 1)...  a terceira etapa é uma subtarefa do seu problema maior, apenas transformei essa subtarefa em uma tarefa separada. Pelo que entendi do problema principal, você precisará fazer essa lógica... é muito mais fácil tratar de coisas mais simples, do que trata de algo mais complexo que contém algo simples dentro dela.

 

Qualquer coisa releia o tópico do início, passando por cada postagem...

 

RESUMINDO:

Faça a segunda etapa e posta o código aqui.

Depois fala a terceira etapa,e posta o código aqui.

 

ou

 

Caso tenha alguma dúvida, é só perguntar.

 

No aguardo.

 

 

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