Análisis y diseño de algoritmos: canje de monedas

Tabla de contenido

Descripción del problema

Ideas de diseño de algoritmos

 Código

Resultados de la ejecución del algoritmo y análisis de la complejidad del tiempo de cálculo


Descripción del problema:

Hay varias monedas de 1 céntimo, 2 céntimos, 5 céntimos, 10 céntimos, 50 céntimos y 100 céntimos. Ahora quieres usar estas monedas para pagar W yuan. Diseña un algoritmo codicioso para completarlo con la menor cantidad de monedas posible . Comportamiento de pago. Hay varias monedas de 1 céntimo, 2 céntimos, 5 céntimos, 10 céntimos, 50 céntimos y 100 céntimos. Ahora quieres usar estas monedas para pagar W yuan. Diseña un algoritmo codicioso para completarlo con la menor cantidad de monedas posible . Comportamiento de pago.

Ideas de diseño de algoritmos:

Diseñe un bucle for para realizar operaciones, y la cantidad de bucles está realmente vinculada a la cantidad de hojas. Establezca la condición, si ww>arr[i] (la denominación más grande actualmente aceptada), i-- no se ejecutará, tal vez la denominación se pueda reducir una vez. Si no se puede reducir, ejecute i--, deje que lo intente la siguiente denominación más pequeña, y así sucesivamente. Finalmente, si ww=0, el resultado se puede mostrar.

 Código:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			double w = sc.nextDouble();
			int ww = (int)(w*100);//把元单位转换为分
			int arr[] = new int[6];
			for (int i = 0; i < 6; i++) {//输入硬币的几种面额
				int a = sc.nextInt();
				arr[i] = a;
			}
//		Arrays.sort(arr);//若是乱序,则需要排序
			int num = 0;//存储使用张数
			for (int i = 5; i >= 0;) {//因为排序默认从小到大,所以这里要从后往前
				if (ww >= arr[i]) {
					ww = ww - arr[i];
//				i++;
					num++;//每使用一张,加1
				} else {
					i--;//把i--安排在这里,上面只要最大的面额还能用,就不减;不能用了,就执行i--
				}
				if (ww == 0) {
					System.out.println(num);//输出张数
					break;
				}
			}
		}
	}
}

Resultados de la ejecución del algoritmo y análisis de la complejidad del tiempo de cálculo:

Si se requiere ordenar, la complejidad del tiempo es T(n)=O(nlogn)

Si no se requiere clasificación, la complejidad del tiempo es T(n)=O(n)

 

Supongo que te gusta

Origin blog.csdn.net/m0_64206989/article/details/130702150
Recomendado
Clasificación