假设我有n笔钱,而A项费用为1,B项费用为2,C项费用为3。
如何以一定金额打印所有可能的购买组合?
n = 3的输出应如下所示:C - A,B - B,A - A,A,A
我想出的解决方案很遗憾没有用。
void purchase(int money)
{
if (money == 0)
{
return;
}
else
{
if (money > 3)
{
cout << "C ";
purchase(money - 3);
}
else if (money > 2)
{
cout << "B ";
purchase(money - 2);
}
else if (money == 1)
{
cout << "A ";
}
}
}
答案 0 :(得分:0)
使用支持缓冲区和缓冲区功能,可以轻松实现此操作。这里str
用作缓冲区,我保存到目前为止遇到的字母,而depth
用于保持关卡。
void purchase_impl(int money, char * str, int depth) {
if (money == 0) {
if (depth > 0) {
str[depth] = '\0';
std::cout << str << std::endl;
}
return;
}
if (money >= 3) {
str[depth] = 'C';
purchase_impl(money-3, str, depth+1);
}
if (money >= 2) {
str[depth] = 'B';
purchase_impl(money-2, str, depth+1);
}
if (money >= 1) {
str[depth] = 'A';
purchase_impl(money-1, str, depth+1);
}
}
void purchase(int money)
{
char * str = (char *) malloc(money+1);
purchase_impl(money, str, 0);
free(str);
}
答案 1 :(得分:0)
您需要跟踪您的路径,并测试正确的值并包括所有可能性。
function getClientes(){
let listaClientes = JSON.parse(localStorage.getItem('listaClientesLS'));
let clientes = [];
if (listaClientes == null) {
clientes = [];
} else{
listaClientes.forEach(obj =>{
let objCliente = new Cliente(obj.nombre, obj.apellido1, obj.apellido2, obj.cedula, obj.telefono, obj.email);
obj.listaVehiculos.forEach(objVehiculoTemp => {
let objVehiculo = new Vehiculo(objVehiculoTemp.matricula,objVehiculoTemp.marca,objVehiculoTemp.modelo,objVehiculoTemp.anno,objVehiculoTemp.capacidad,objVehiculoTemp.kilometraje);
objCliente.agregarVehiculo(objVehiculo);
});
clientes.push(objCliente);
})
}
return clientes;
此解决方案列出了所有可能的购买,包括不会耗尽现金供应的购买。