olhar para 53, sabendo que vai ter q tirar um 5… e ficar tentando tirar 50, vendo q não da… depois tirar 20 e 20, e tentar tirar 10, vendo que não vai dar… pra só ai tirar o 5, é algo q axo sem sentido… qualquer número impar, vc vai tirar um 5, e apenas um 5…
a não ser que vc tenha limite de cada uma das notas, ai vc terá que saber, que pra sua conta da certo, depois q tirar 1x5, depois so poderar tirar eles em pares, para manter a conta final em um número impar
OBSERVAÇÃO: se no seu codigo, inserir o valor em uma string pode economiza com String.valueOf(), lembrando que assim teria de retornar o valor da string para o proximo teste e não com fiz, retornando o valor inteiro. :?
o que vc precisa responde é… seu caixa eletronico é real ?? ele tem limites de notas dentro dele ?? ou vc pode conciderar que as notas dentro do caixa rapido são infintos ??se forem infinitos, faz as contas como te falei, no fim, ve se tem + de 30 notas, se tiver, diz q o saldo não é permitido por excesso de notas… e pronto ta feito seu programa…
…
se teu programa tiver limite de notas, vc precisa ter recipient contabilizar elas… e a diferença… é que as notas cinco, terão comportamento especial, quando vc tiver tratando impares e pares…
se o numero for impar… vc só pode ter notas cinco em somas impares… 1 nota, 3 notas, 5 notas, 7 notas … etc
se o numero for par … vc só pode ter notas cinco em somas pares… 0 notas, 2 notas, 4 notas, 6 notas…
pode ter certeza… quando for impar… conte primeiro a 1° nota 5, depois faça o resto das contas… e seja feliz
Obs.: essa parte de contagem de notas, tem milhoes de exemplos aki no guj… e a unica diferença pro seu problema é essa questão de impar/par para a nota 5
De resto faz uma divisão normal com as notas de 100, 50, 20, 10 e 2[/quote]
Não lí e nem vou ler… hehehehehe por isso falei em quebrar a cabeça, com o enunciado vou tentar fazer do zero, tendo em vista que ainda nem pensei numa solução, ví o problema, achei legal, ainda não pensei em nada e imaginei que o enunciado era alguma coisa mais elaborda do que… sei lá, quero fazer assim e assado, mas o que o professor quer na verdade é… etc. etc.
Mas valew, acho que com o que está no 1º post dá pra fazer…
import java.util.ArrayList;
import java.util.List;
public class CaixaEletronico {
public static void main(String[]args){
int valor=3 ,p;
List<Integer> notas =new ArrayList<Integer>();
if(String.valueOf(valor).length()>=3){
p=valor/100;
for(int i=0;i<p;i++)notas.add(100);
valor=valor%100;
}
if((String.valueOf(valor).length()==2) && ((Integer.parseInt(String.valueOf(valor).substring(0,1)))>=5)){
p=valor/50;
for(int i=0;i<p;i++)notas.add(50);
valor=valor%50;
}
if((isPar((Integer.parseInt(String.valueOf(valor).substring(0,1)))))==true){
p=valor/20;
for(int i=0;i<p;i++)notas.add(20);
valor=valor%20;
}
if(String.valueOf(valor).length()==2){
p=valor/10;
for(int i=0;i<p;i++)notas.add(10);
valor=valor%10;
}
if(valor>=5){
p=valor/5;
for(int i=0;i<p;i++)notas.add(5);
valor=valor%5;
}
if((String.valueOf(valor).length()==1) && (valor>=2)){
p=valor/2;
for(int i=0;i<p;i++)notas.add(2);
valor=valor%2;
}
if(((String.valueOf(valor).substring(0,1)).equals("1")) || ((String.valueOf(valor).substring(0,1)).equals("3")) || ((String.valueOf(valor).substring(0,1)).equals("6")) || ((String.valueOf(valor).substring(0,1)).equals("8"))){
int sumNota=0;
for(int i:notas)sumNota+=i;
System.out.println("O valor digitado não pode ser sacado \nsugestão de valor: "+sumNota);
}else{
System.out.println(notas);
}
}
static boolean isPar(int val){
return ((val%2==0)? true:false);
}
}
Testa ai! a lógica ta certa. Pode implementar agora a classe diacoro o uso. O quem fiz não foi nada mais que avaliar o problema parte por parte.
se quizer imprimir o número de notas é ainda mais fácio:
é so pegar o valor “p” que é a quantidade.
David… não gostei de sua solução por eu não poder sacar valores impares… acho que não era bem isso que ele queria… Ele queria que as notas fossem combinadas de uma forma tal que qualquer valor pudesse ser sacado, sempre dizendo primeiro qual a maior nota, pra depois dizer quais as menores…
Não sei, acho que entendi errado então… quando chegar em casa avalio melhor…
Amigo da uma olhada no código que eu fiz, os unicos valores que impossivel para saque é valor 1 e 3. Todos os demais são possiveis, para valores maiores que 10 terminado em 3 ou 1, o código faz o seguinte no caso de terminado 3 o
algoritmo deduz 5 do valor, teremos uma nota 5 para esse valor. E no caso de terminar em 1 deduz 6 teremos 3 notas de 2 nesse valor.
import java.util.Scanner;
public class Saque {
private final Integer[] notas = new Integer[] { 100, 50, 20, 10, 5, 2 };
private int valor;
public int getValor() {
return valor;
}
public void setValor(int valor) {
this.valor = valor;
}
public String sacar() {
String mostraNota = "";
int resultado = 0;
int divisao = 0;
if (valor == 1 || valor == 3)
return "Valor de saque invalido";
for (Integer nota : notas) {
if (valor >= nota) {
resultado = valor % nota;
divisao = valor / nota;
if (resultado != 3 && resultado != 1) {
mostraNota += " " + (valor / nota) + "x" + nota;
valor = valor - (nota * (valor / nota));
}
if (nota >= 10 && resultado == 3) {
valor = valor - 5;
mostraNota += " " + "1x5";
}
if (nota >= 10 && resultado == 1) {
valor = valor - 6;
mostraNota += " " + "3x2";
}
}
}
return mostraNota;
}
public static void main(String args[]) {
int valor = 1000;
Saque saque = new Saque();
Scanner scanner = new Scanner(System.in);
while (valor != 0) {
System.out.println("Digite um Valor ou 0 para sair:");
valor = scanner.nextInt();
if (valor != 0) {
saque.setValor(valor);
System.out.println(saque.sacar());
}
}
}
}
Faça um e seja feliz… só creio que para a situação, era disso que ele estava precisando… bom não vou perder meu tempo com isso, mas se incomodar, faz aí…
Faça um e seja feliz… só creio que para a situação, era disso que ele estava precisando… bom não vou perder meu tempo com isso, mas se incomodar, faz aí…
Abraços ;)[/quote]
para situação o q precisava era uma ajuda pra conseguir iniciar, e não que alguem fizesse pela pessoa… agora c for fazer, que se faça com conceitos OO… e não uma linha procedura… eu axo impressionante como muita gente ainda continua pensando e escrevendo programas sem nem ao menos dividir corretamente as responsabilidades em métodos e essas coisas…
o.O … ainda mais quando esta se tentando ajudar alguem q esta iniciando, ai sim, que tem mesmo q mostrar com fazer com conceitos OO
[quote]para situação o q precisava era uma ajuda pra conseguir iniciar, e não que alguem fizesse pela pessoa… agora c for fazer, que se faça com conceitos OO… e não uma linha procedura… eu axo impressionante como muita gente ainda continua pensando e escrevendo programas sem nem ao menos dividir corretamente as responsabilidades em métodos e essas coisas…
o.O … ainda mais quando esta se tentando ajudar alguem q esta iniciando, ai sim, que tem mesmo q mostrar com fazer com conceitos OO[/quote]