Boa Noite amigos, estive em uma entrevista… em um bate-papo bem descontraído, o entrevistador comentou sobre um problema, que somente os iniciantes em programação conseguiriam resolver. Até agora não consegui.
Segue abaixo a descrição:
Ordenar(crescente) 3 números que o usuário digita aleatoriamente, seguindo as regras abaixo:
1- Não é permitido utilizar condicionais(if…ou qualquer outra)
2- Não é permitido Looping(Do…while… ou qualquer outro)
Alguém consegue imaginar como isso pode ser feito???
Já estou quase achando que esse problema é semelhante ao “Par ou ímpar com o espelho, ter q dar número ímpar” uhahuauha
Mas… ele me disse: Por acaso você acha que o “If” foi desenvolvido com outro IF ???
Enfim, caso seja possível, me enviem o código !!!
Umas possibilidades…
usar o operador ? :
ou usar as funções Math.max, e Math.min
e um pouco de lógica hehe
tente ai, com essas dicas você resolve
fw
Pelo menos que eu lembre, o respectivo ao if no assemble é feito com uma comparacao, que basicamente continua executando a sequencia do código se a condição nao for satisfeita e da um salta, parecido com o goto, caso a questao seja satisfeita…
[quote=Dieval Guizelini]Umas possibilidades…
usar o operador ? :
ou usar as funções Math.max, e Math.min
e um pouco de lógica hehe
tente ai, com essas dicas você resolve
fw[/quote]
Acho que os método do Math.max e Math.min usam algum desvio internamente. Mas como tb o não especificou o problema, vai fundo…hehe
Olá senhores, seguindo a dica, segue abaixo:
Muito Obrigado, e em breve eu aviso se era desse jeito…rs
import javax.swing.JOptionPane;
import java.math.*;
public class Simples {
public static void main(String[] args) {
int a = 0;
int b = 0;
int c = 0;
int pri = 0;
int seg = 0;
int ter = 0;
a=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o Primeiro Numero: ","Captação de dados",JOptionPane.INFORMATION_MESSAGE));
b=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o Segundo Numero: ","Captação de dados",JOptionPane.INFORMATION_MESSAGE));
c=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o Terceiro Numero: ","Captação de dados",JOptionPane.INFORMATION_MESSAGE));
int min=Math.min(a, b);
pri = Math.min(min,c);
int max = Math.max(a,b);
ter = Math.max(max, c);
seg = a + b + c;
seg = seg - pri;
seg = seg - ter;
JOptionPane.showMessageDialog(null,"Primeiro: " + pri,"Números ordenados", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null,"Segundo: " + seg,"Números ordenados", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null,"Terceiro: " + ter,"Números ordenados", JOptionPane.INFORMATION_MESSAGE);
}
}
Beleza,
foi isso que tinha pensado.
min(a,b,c) <= Soma(a,b,c)-min(a,b,c)-max(a,b,c) <= max(a,b,c)
Este tipo de problema é amplamente explorado em linguagens funcionais ou em clausulas de horn…
fw
Ps: quando postar código fonte no forum, use as tags [ code] … [/code ] elas irão produzir:
... // melhore a apresentação do seu código aqui no guj
As vezes é difícil pensar simples né??
rs…
Mas é isso ae… muito obrigado a todos…
solução tosca que nao usa max/min e obedece os requisitos:
void ordenaTres (int a, int b, int c) {
int menor, meio, maior;
menor=meio=maior=0;
boolean nada = false;
nada = a > b && a > c && (maior = a) > 0;
nada = b > a && b > c && (maior = b) > 0;
nada = c > b && c > a && (maior = c) > 0;
nada = a < b && a < c && (menor = a) > 0;
nada = b < a && b < c && (menor = b) > 0;
nada = c < b && c < a && (menor = c) > 0;
nada = a < b && a > c && (meio = a) > 0;
nada = b < a && b > c && (meio = b) > 0;
nada = c < b && c > a && (meio = c) > 0;
nada = a > b && a < c && (meio = a) > 0;
nada = b > a && b < c && (meio = b) > 0;
nada = c > b && c < a && (meio = c) > 0;
System.out.print(menor + " " + meio + " " + maior + "\n");
}
Essa do Sergio Lopes é boa, é quase como um IF, já que com o operador && ele não executa mais assim que achar um false…
Acho que é melhor que usando Math.min e Math.max.