Multiplos de 3

boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3

Um número é múltiplo de 3 quando o resto de sua divisão por 3 é zero. Para saber o resto da divisão por 3, use o operador “%”. Por exemplo, 10 % 3 == 1.

Utilize o operador mod… representado por %. Que retorna o resto da divisão inteira:

Exemplo:

int numero = 40;
System.out.println(40 % 3);

Se o resto da divisão for 0 (zero) então ele é multiplo:

if(numero % 3 == 0){
        System.out.println("Eh multiplo de 3");
}
  1. Pegue o primeiro múltiplo de 3, no caso, o próprio 0.
  2. A partir daí, some +3 para achar o próximo multiplo de 3.

Ou seja, basta fazer um for que vai pulando de 3 em 3, até o 99.

[quote=zeimbic]boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3[/quote]

public final class Main {
	public static void main(String args[]) {
		// loop de 1 a 100
		for (int i = 1; i <= 100; i++) {
			// verifica se o resto da divisao por três é zero
			if ((i % 3) == 0) {
				// Imprime o valor na tela
				System.out.println(i);
			}
		}
	}
}

Outra opção. Todo número multiplicado por 3, será também um múltiplo de 3. Observe:
3x0 = 0
3x1 = 3
3x2 = 6

Então, faça um laço que vai somando esse número em negrito, e imprima o resultado desse número multiplicado por 3. Quando esse resultado for igual ou maior que 100 (precisamente no 34º termo), pare o laço.

[quote=brunno.orpinelli][quote=zeimbic]boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3[/quote]

public final class Main {
	public static void main(String args[]) {
		// loop de 1 a 100
		for (int i = 1; i <= 100; i++) {
			// verifica se o resto da divisao por três é zero
			if ((i % 3) == 0) {
				// Imprime o valor na tela
				System.out.println(i);
			}
		}
	}
}

[/code][/quote]


Ok, já que ele postou a forma estúpida, então vamos as duas formas mais inteligentes:
[code]public final class Main {
	public static void main(String args[]) {
		// loop de 0 a 100, de 3 em 3.
		for (int i = 0; i <= 100; i+=3) {
			// sempre vai ser múltiplo
			System.out.println(i);
		}
	}
}

public final class Main { public static void main(String args[]) { int produto = 0; int multiplicador = 0; do { produto = 3 * multiplicador; multiplicador++; // sempre vai ser múltiplo System.out.println(produto); } while (produto <= 100) } }

Ambos os códigos farão 1/3 do processamento do exemplo anterior. Só use aquele programa se você precisar imprimir os outros números, e só indicar quais são múltiplos.

nossa galera valeu mesmo deu para realmente entender
valeu mesmo… :smiley:

Acho que no exercício do múltiplo de 3, a intenção não é ter performance, e sim saber utilizar o operador %.

Então, a solução

if(i % 3 == 0)

creio ser a mais indicada e a que o professor deseja… Apesar de as outras também funcionarem

Eu geralmente gosto quando meus alunos não fazem simplesmente o óbvio. Aliás, os bons alunos procuram não fazer o óbvio, mas sim, usar a solução inteligente para o problema. Pensar um pouquinho na matemática antes de resolver o exercício mostra que o aluno está realmente tentando elaborar o algoritmo, não repetir mecanicamente o que foi visto em aula. Pior ainda, é quando o aluno memoriza essa solução com % como “clássica”, e depois você acaba vendo algo assim em código comercial…

Um clássico é o “Faça um programa que mostre a soma de todos os números de 1 até 100”. O óbvio é fazer:

int soma = 0; for (int i = 0; i < soma; i++) { soma += i; } System.out.println("A soma é %d", soma);

E, por incrível que pareça, já vi isso num sistema!

Um aluno mais atento pode fazer:

int a1 = 1; int an = 100; n = 1; int soma = ((a1 + an) * n) / 2; System.out.println("A soma é %d", soma);

E chegar no mesmo resultado.

O que eu costumo fazer em sala é mostrar no projetor a solução óbvia, e depois mostrar as soluções melhores, que eles obteriam pensando um poquinho mais no problema. Isso geralmente gera uma turma surpresa e melhora muito a qualidade de algoritmos futuros.

Concordo com a questão de fazer o aluno pensar…

Mas discordo com fazer algorítmos complexos para coisas simples, a não ser que o algoritmo permanceça simples…

Esse algorítmo por exemplo (minha opnião):

        int produto = 0;  
        int multiplicador = 0;  
        do {  
           produto = 3 * multiplicador;  
           multiplicador++;  
           // sempre vai ser múltiplo  
           System.out.println(produto);  
        } while (produto <= 100)

É muito complexo para esse problema…

Esse outro, já achei interessante, pois mantém a simplicidade:

for (int i = 0; i <= 100; i+=3) {  
            // sempre vai ser múltiplo  
            System.out.println(i);  
} 

A não ser que a performance, seja algo que for fazer a diferença… A principal intenção da programação é ter um código limpo e fácil de entender… Aí concordo em usar criatividade…

(Não entenda como uma discussão no sentido ruim… é só meu ponto de vista)

Isso não é possível afirmar, pois a máquina virtual tem uma série de algorítmos, para otimizar código… Já li um artigo inclusive, que dizia: faça um código bom, não fique preocupado em otimizar coisas pequenas pois pode até atrapalhar a máquina virtual…

Mas aí já é outra discussão :smiley:

Valew

Eu concordo com você. Geralmente é melhor fazer código limpo do que performático.
Mas no caso desse algoritmo a solução “pulando de 3 em 3” é bastante óbvia também, e geralmente o aluno não chega nela pq o professor fez questão de ensinar o operador de resto pouco antes na aula.

Pra quem está iniciando, é sempre bom utilizar o VisuAlg para treinar um pouco sobre algoritmos e até mesmo visualizar os valores de entrada e saída em tempo real.

for (int z = 1; z <=1000; z++){
			if (z % 3 == 0){
				System.out.println("Múltiplo de 3: "+z);
			}