Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Zorba_97

Problema Dojo [Ligar/desligar lâmpadas]

Recommended Posts

Eu não consigo terminar o problema proposto pelo meu professor do link a seguir: http://dojopuzzles.com/problemas/exibe/lampadas-no-corredor/

 

Segue o código:

 

 

#include <stdio.h>
 
main()
{
   int i,j,numLamp,vet[50];
   printf("Digite, respectivamente, o numero de lampadas e voltas a ser dadas:\n");
   scanf("%d",&numLamp);
   scanf("%d",&j);
   
   for(i=1;i<=j;i++)
   {
      for(j=1;j<=numLamp;j++)
      {
         if(j%i==0) vet[j]=vet[j]?0:1;
      }
   }
   
   for(i=1;i<=numLamp;i++)
   {
     if(vet[j]==1) printf("On\n");
     else printf("Off\n");
   }
   getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi isso aqui:

vet[j]=vet[j]?0:1;

 

 

for(i=1; i<=len; i++) {
   for(j=0; j<len; j++) {
      if (j+1 % i == 0)
         vet[j] = !vet[j];
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O professor disse que os operadores "?" e ":" juntos funcionam como os operadores "if" e "else" respectivamente para alguns casos e eu poderia usá-los. E atribuo valor 0 para desligar os interruptores e 1 para ligá-los. Minhas dúvidas são: estou certo fazendo certo em atribuir dessa forma e como imprimo na tela o output como o site do dojo diz?

 

E Isis, eu não entendi como funciona isso:

 

vet[j] = !vet[j];

Compartilhar este post


Link para o post
Compartilhar em outros sites

O teu ternário à primeira vista da a entender que vc errou no sinal (o clássico '=' no lugar do '==').

 

O '!' é operador de negação (NOT). Como os valores do array se comportam como booleanos é mais simples que usar ternário.

 

P/ imprimir:

 

 

printf("[");
for (int i = 0; i<len; i++)
   printf("%s", (vet[i]?"on":"off"));
   if (i < len-1) printf(", ");
printf("]");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que consegui terminar aqui o código. Eu coloco 3 como dado de entrada e imprime "on, off off" conforme o site do dojo mostra.
Obrigado.

O código:

#include <stdio.h>

main()
{
int i,j,len,vet[50];

printf("Input: ");
scanf("%d",&len);
system("cls");
printf("Output:\n\n");

for(i=1;i<=len;i++)
{
for(j=1;j<len;j++)
{
if(j+1%i==0) vet[j]=!vet[j];
}
}
printf("[");
for(i=0;i<len;i++)
{
printf("%s",(vet?" ON ":" OFF "));
if(i<len-1) printf(" ");
}
printf("]\n\n");

system("pause");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.