Criar um simulador de caixa eletrônico

Pessoal estou criando um sistema de caixa eletrônico, com as notas 100, 50, 20, 10, 5, 2. pois quando eu faço o calculo com números quebrados por exemplo 138, 246, 113, ele não consegui calcular corretamente. Ex: com o numero 113 a saída foi:

1 notas de R$ 100,00
1 notas de R$ 10,00
1 notas de R$ 2,00

sendo assim ele calculou 112 e não 113, preciso de ajuda.

embaixo postarei o código completo:

package exercicio;

import java.util.Scanner;

public class Exercicio4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

	System.out.println("Digite o valor que você deseja sacar");
	int valor_0067 = input.nextInt();
	
	int nota100_0067 = 100;
	int nota20_0067 = 20;
	int nota50_0067 = 50;
	int nota10_0067 = 10;
	int nota5_0067 = 5;
	int nota2_0067 = 2;	

	if(nota100_0067 >= nota100_0067) {
		nota100_0067 = valor_0067 / 100; 
		valor_0067 = valor_0067 % 100;   
		if (nota100_0067 != 0)
			System.out.println(nota100_0067 + " notas de R$ 100,00");
	} 
	
	if(nota50_0067 >= nota50_0067) {
		nota50_0067 = valor_0067 / 50;
		valor_0067 = valor_0067 % 50;
		if (nota50_0067 != 0)
			System.out.println(nota50_0067 + " notas de R$ 50,00");
	}
	
	if(nota20_0067 >= nota20_0067) {
		nota20_0067 = valor_0067 / 20;
		valor_0067 = valor_0067 % 20;
		if (nota20_0067 != 0)
			System.out.println(nota20_0067 + " notas de R$ 20,00");
	}
	
	if(nota10_0067 >= nota10_0067) {
		nota10_0067 = valor_0067 / 10;
		valor_0067 = valor_0067 % 10;
		if (nota10_0067 != 0)
			System.out.println(nota10_0067 + " notas de R$ 10,00");
	}
	
	if(nota5_0067 >= nota5_0067) {
		nota5_0067 = valor_0067 / 5;
		valor_0067 = valor_0067 % 5;
		if (nota5_0067 != 0)
			System.out.println(nota5_0067 + " notas de R$ 5,00"); 
	}
	
	if(nota2_0067 >= nota2_0067) {
		nota2_0067 = valor_0067 / 2;
		valor_0067 = valor_0067 % 2;
		if (nota2_0067 != 0)
			System.out.println(nota2_0067 + " notas de R$ 2,00");
	}
}

}

Todos os testes estão retornando sempre verdadeiro:

Além disso, você deve controlar a distribuição das cédulas.
Ex.:

cédula: 2 resto: 0 - composição: [[4*2= 8], [1*5= 5], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]

Não é uma explicação pequena, mas as saídas a seguir representam parte do comportamento esperado:

cédula: 100 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 50 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 20 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 10 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 5 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 2 resto: 1 - composição: [[1*2= 2], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [1*100= 100]]
cédula: 100 resto: 103 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [0*50= 0], [0*100= 0]]

cédula: 50 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [2*50= 100], [0*100= 0]]
cédula: 20 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [2*50= 100], [0*100= 0]]
cédula: 10 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [2*50= 100], [0*100= 0]]
cédula: 5 resto: 3 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [2*50= 100], [0*100= 0]]
cédula: 2 resto: 1 - composição: [[1*2= 2], [0*5= 0], [0*10= 0], [0*20= 0], [2*50= 100], [0*100= 0]]
cédula: 50 resto: 53 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [0*20= 0], [1*50= 50], [0*100= 0]]

cédula: 20 resto: 13 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 10 resto: 3 - composição: [[0*2= 0], [0*5= 0], [1*10= 10], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 5 resto: 3 - composição: [[0*2= 0], [0*5= 0], [1*10= 10], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 2 resto: 1 - composição: [[1*2= 2], [0*5= 0], [1*10= 10], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 10 resto: 13 - composição: [[0*2= 0], [0*5= 0], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]

cédula: 5 resto: 3 - composição: [[0*2= 0], [2*5= 10], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 2 resto: 1 - composição: [[1*2= 2], [2*5= 10], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]
cédula: 5 resto: 8 - composição: [[0*2= 0], [1*5= 5], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]

cédula: 2 resto: 0 - composição: [[4*2= 8], [1*5= 5], [0*10= 0], [2*20= 40], [1*50= 50], [0*100= 0]]

PedreiroDeSoftware ha primeira parte do código que você fala que está sendo retornando verdadeiro eu entendi, mas a segunda parte, a parte das distribuições das cédulas não entendi nada, eu sou iniciante em programação, se você puder explicar mais detalhadamente eu te agradeço.

Esse exercício não é para iniciantes.
Vc pode procurar por implementações aqui:

Se as cédulas são infinitas, o comportamento é semelhante ao algorítmo de troco:

irei ver, muito obrigado