Nos primórdios de 2007, quando estava começando a entrar no mundo da TI, em meio a tantos currículos enviados fui convidado para fazer uma entrevista em uma empresa que desenvolvia softwares em php. Nessa primeira entrevista, todos os candidatos ficavam na mesma sala e recebiam cada um, uma folha contendo 5 questões de lógica de programação e conhecimentos da linguagem (métodos, funções, etc).
Dentre estas questões, teve uma que dificilmente vou esquecer, era uma pergunta simples mas que fugia do cotidiano. Lanço um desafio para aqueles que desejarem participar e ver em quantos comandos são capazes de resolves. Mas sem colar... hahaha
|
A Missão
A proposta deste desafio é:
Dada duas variáveis A e B, sendo A = 3 e B = 5, escreva um código, sem utilizar uma terceira variável, capaz de trocar o valor entre elas. Ao fim, as variáveis deverão ser iguais a: A = 5 e B = 3......
Ah sim! Daqui a UM mês irei divulgar o resultado, então há tempo de sobra.
Gostaria muito de receber sua contribuição. Obrigado. :D
$a = 3//valor inicial de A segundo o enunciado
ResponderExcluir$b = 5//valor inicial de B segundo o enunciado
$a = $a + $b//A passa a vale 8
$b = $a - $b//B passar a valer 3
$a = $a - $b//A passar a valer 5
/* -- Problema Resolvido -- */
$A += 2
ResponderExcluir$B -= 2
esse ta mais curto
ExcluirÉ, ficou mais curto, mas em programação geralmente trabalhamos apenas com variáveis.
ExcluirEvitamos ao máximo usar constantes (números)
Assim nos dá a possibilidade aproveitar o código.
Não importando o valor de A e B, substituímos o valor de um pelo outro...:P
A=5
ResponderExcluirB=3
Mais simples náo há !
é mais tá errado cara
Excluirhei patetas voçes estao errado acho eu porque a pergunda diz trocar de valor.
ResponderExcluirdexan ajuda nhos=voçes pensa se nao soubecemos os valores como eh que trocavamos os valores
ResponderExcluirDo While(A <= B)
ResponderExcluirA += 1
B -= 1
EndDo
int a = 3, b = 5;
ResponderExcluirConsole.WriteLine("A = " + a + " e B = " + b);
if (a > b)
{
a -= b;
b += a;
}
else
{
b -= a;
a += b;
b = a - b;
}
Console.WriteLine("A = "+a +" e B = "+b);
Console.ReadLine();
Acredito que o mais simples seja:
ResponderExcluirB = B * A
A = B / A
B = B / A
(Gilberto W. Alexandre)
Ai sim hen fera, Omilhou!!!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluir$b.b";
ResponderExcluir}
?>
esse da certo
Java
ResponderExcluirint A=3;
int B=5;
B = (B-A); // B recebe 5-3 = 2
A = (A+B); // A recebe 3+2 = 5
B = (A-B); // B recebe 5-2 = 3
System.out.println("Valor de A: "+A+" valor de B: "+B);
Este comentário foi removido pelo autor.
ResponderExcluirEm linguagem C;
ResponderExcluir#include
int main (){
int a,b;
a=3;
b=5;
printf ("\n Valor de A inicialmente = %i\n",a);
printf ("\n Valor de B inicialmente = %i\n\n",b);
printf ("\n Agora invertendo valores");
printf ("\nAgora vamos inverter os valores A= %i\n\n",a+2);
printf ("\nAgora vamos inverter os valores B= %i\n\n",b-2);
system ("pause");
}
O mais simples, e acho a resposta correta segundo o enunciado:
ResponderExcluirA = 5;
B = 3;
Se a opção acima não vale, use essa:
A = A + (B - A)
B = B - (B - A)
veja bem....
Excluirfazendo a = a + (b-a) teremos... a = 5 + (3 - 5) => a = 5 - 2 => a = 3
depois
fazendo b = b - (b - a) teremos... b = 3 - (3 - 3) => b = 3 - 0 => b = 3
logo nao chega-se à solução do problema...
Este comentário foi removido pelo autor.
ResponderExcluirEu apaguei mais irei retorna-la, este exemplo é diferente é posicionando o valor maior sempre na posição "A".
Excluirpublic void TrocaValores()
{
const int digitoMaximo = 2;
var sequenciaDigitada = new int [digitoMaximo];
Console.WriteLine("A os Numeros a ser trocados.");
for (int i = 0; i < digitoMaximo; i++)
{
string posicao = i == 0 ? "A" : "B";
Console.WriteLine((i + 1)+ "º Posição" + " - " +(posicao));
sequenciaDigitada[i] = Convert.ToInt32(Console.ReadLine());
}
if (sequenciaDigitada[0] < sequenciaDigitada[1])
{
sequenciaDigitada[0] = sequenciaDigitada[1];
}
if (sequenciaDigitada[1] > sequenciaDigitada[0])
{
sequenciaDigitada[1] = sequenciaDigitada[0];
}
Console.WriteLine("Posição: A = {0}, Posição: B = {1}", sequenciaDigitada[0], sequenciaDigitada[1]);
Console.ReadLine();
}
Deixarei este exemplo aqui caso alguém interesse.
Passei o exemplo da pergunta logo a abaixo.
Muito simples Jovem segue o exemplo:
ResponderExcluirpublic void TrocaValores()
{
int a = 5;
int b = 3;
if (a < b)
{
a = b;
}
if (b > a)
{
b = a;
}
Console.WriteLine("Posição: A = {0}, Posição: B = {1}", a, b);
Console.ReadLine();
}
Explicando meu raciocínio:
ResponderExcluirA - 3
B - 5
A = A + B
A - 8
B - 5
B = A - B
A - 8
B - 3
A = A - B
A - 5
B - 3
#include
ResponderExcluirint main(){
int a = 3, b= 5;
printf("valor de a: e valor de b:");
scanf("%i %i",&a, &b);
printf("valor de a: %i e valor de b: %i \n",a,b);
system("pause >> 0");
}
Segue solução
ResponderExcluirA=(B+B+B)/A
A=(5+5+5)/3
A=5
B=(B+B+B)/B
B=(5+5+5)/5
B=3
Utilizando bytewise (qualquer linguagem)..
ResponderExcluirA ^= B
B ^= A
A ^= B
Pronto.. :)
public static void main(String[] args) {
ResponderExcluirint a = 3;
int b = 5;
a = a + b; // 3+5=8
b = a - b; // 8-5=3
a = a - b; // 8-3=5
System.out.println("a = " + a + "\n" + "b = " + b);
}
}
A forma que muita gente pensou, e que é bem curta e simples é essa:
ResponderExcluir#include
using namespace std;
int main() {
int a = 8;
int b = 15;
a = b-a;
b = b-a;
a = b+a;
cout<<"\na = "<<a;
cout<<"\nb = "<<b;
return 0;
}
Qualquer linguagem:
ResponderExcluira = b-a;
b = b-a;
a = b+a;
Delphi:
ResponderExcluirA:= 5
B := 3
em java
ResponderExcluirint a = 3
int b = 5
a = b
b = a-2
"""
ResponderExcluirFiz em Python
"""
#Versão de Paulo Cão
A, B = 3, 5
A = B
B = A-2
print("A variável (A) vale", A,"e a variável (b) vale", B,)
Este comentário foi removido pelo autor.
ResponderExcluirint a=3;
ResponderExcluirint b=5;
System.out.println("Variavel a adiciona 2 " +(a+2));
System.out.println("Variavel b subtrai 2 " +(b-2));
Mais simples que python nâo tem:
ResponderExcluirA, B = 3, 5
B, A = A, B
Mais correto e prático que achei foi o código do (Gilberto W. Alexandre), pois não importa a mudança de valores de A e B, sendo assim sempre A=B, e B=A.
ResponderExcluirA = A+B
ResponderExcluirB = A-B
A = A-B
A = A+B
ResponderExcluirB = A-B
A = A-B
int a = 10;
ResponderExcluirint b = 20;
a = a * b;
b = a / b;
a = a / b;
System.out.println(a);
System.out.println(b);
int a=3,b=5;
ResponderExcluira = (a+b)-a;
b = (a+a+a)/b;
System.out.println(a+" "+b);
JAVA
ResponderExcluirpublic class Logica {
public static void main(String[] args) {
int A = 3;
int B = 5;
if (A == 3 && B == 5){
A = 5;
B= 3;
}
System.out.println("A= " + A);
System.out.println("B= " + B);
}
}
public class Logica {
ResponderExcluirpublic static void main(String[] args) {
int A = 3;
int B = 5;
A=A+B
B=A-B
A=A-B
System.out.println("A= " + A);
System.out.println("B= " + B);
}
}
import java.util.Scanner;
ResponderExcluirpublic class Teste_1 {
int a;
int b;
public void troca(int a, int b) {
this.a = b;
this.b = a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
Teste_1 teste = new Teste_1();
System.out.println("Digite o valor de a : ");
int a = scan.nextInt();
System.out.println("Digite o valor de b : ");
int b = scan.nextInt();
teste.a = a;
teste.b = b;
System.out.println("Valor real\n");
System.out.println("a = " + teste.a);
System.out.println("b = " + teste.b);
teste.troca(teste.a, teste.b);
System.out.println("\n\nValor depois\n");
System.out.println("a = " + teste.a);
System.out.println("b = " + teste.b);
}
}
a = 5
ResponderExcluirb = 4
c = a = 4
d = b = 5
A = B + A // A = 8
ResponderExcluirB = A - B // B = 3
A = A - B // A = 5