Pergunta

Eu estou tentando escrever um programa que exibe os números inteiros entre 1 e 100 que são divisíveis por 6 ou 7 mas não ambos .

Aqui está o meu código:

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));

            if (num == true)
            println(i + " is divisible");
        }
    }
}

Os shows código acima as seguintes respostas: 6,7,12,14,18,21,24,28,30,35,36, 42 , 48,49,54,56,60,63,66,70,72,77 , 78, 84 , 90,91,96,98

Agora, os números em negrito 42 e 84 são ambos divisbile por 6 e 7. Agora Se eu mudar o || para && no código acima, o resultado mostra apenas 42 e 84.

Que mudança que devo fazer para remover estes 2 números a partir do resultado final?

Foi útil?

Solução

você tem que fazer a sua condição parecido:

boolean num = (i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0);

Isso é basicamente converter " mas não ambos " ao código Java:)

Outras dicas

XOR é o caminho a percorrer.

import acm.program.*;

public class Problem4 extends ConsoleProgram {
  public void run() {
    for (int i = 1; i <= 100; i++) {
      if ( (i % 6 == 0) ^ (i % 7 == 0) ) {
        println(i + " is divisible");
      }
    }
  }
}

Você precisa de uma verificação extra para "mas não ambos". Eu acho que deveria ser:

booleano num = ((i% 6 == 0) || (% i 7 == 0)) && (i% 42 = 0!);

Você também pode tentar

boolean num = ((i % 6 == 0) != (i % 7 == 0));

Pense sobre o que significa ser divisível por 6 e 7 ... a resposta à vida o universo e tudo mais.

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));
            boolean both = ((i % 6 == 0) && (i % 7 == 0));

            if ((num == true) &&  (both == false))
            println(i + " is divisible");
        }
    }
}

Aqui está um trecho que deve funcionar como bem em C ++, mas a mudança para boolean ...

int value;
if ((value % 6 == 0 && value % 7 != 0) || (value % 6 != 0 && value % 7 == 0))
    cout << "Is " << value << " divisible by 6 or 7, but not both? true" << endl;
  else
    cout << "Is " << value << " divisible by 6 or 7, but not both? false" << endl;

Uma versão pouco simplificada

for(int i=1; i<=100; i++) {

            // Either Divisible by 6 or 7 but not both


            if((i%6==0 && i%7!=0) ||( i%7==0 && i%6!=0)) {


                println(i);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top