蓝桥杯 砝码称重 递归 解题报告

本文是一篇关于蓝桥杯比赛中的砝码称重问题的解题报告,主要采用递归算法进行求解。通过设定符号位数组sign[],在递归过程中确定每个数的符号(-1,0,1),最终计算和并与输入数据对比。避免使用大量循环,提升代码简洁性。
摘要由CSDN通过智能技术生成
5个砝码
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1


要求程序输出的组合总是大数在前小数在后。

可以假设用户的输入的数字符合范围1~121。


对于每一个数,它有三种符号,-1,0,1,确定了每个数的符号,我们只要将这些数相加就可以得到一个和,将这个和与输入的数据相比较看是否相等。知道了这个大体思路,可能有些同学已经想到通过5个for循环暴力出来,但是作为一名程序设计者+强迫症患者,我无法忍受这么大一坨循环出现在我的代码之中,所以,当然还是用递归代替之。我们先设置一个符号位数组sign[],在递归的过程中,依次确定sign[0]到sign[4]的值(-1,0,1),当递归到第6层的时候,可以知道,sign[]中所有的值都已经被确定,然后我们就可以用这个符号位来求和,最后输出就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值