今天去参加一个面试,其中有道笔试题是关于最少硬数币问题的,其实是个很简单的问题,思路无非就是优先选择大面值硬币构成目标金额,使用略小面值处理零头。弄两个长度相等的数组,一个由大到小依次存储硬币面值,一个初始值全部为零。遍历硬币数组,取面值尝试构成目标金额,用目标金额减去已构成金额后,继续迭代。
问题就是:我们在日常的开发工作中经常会拿到一个任务后简单思索后就拿机器开始写代码,实现逻辑的正确性,严谨性都由程序运行结果来验证。当手头没有机器或者不让使用机器的时候,居然不知道怎么去梳理逻辑了,或者说大脑根本就在告诉你,这个上机器上跑一下就行了。
我的答案:在处理简单逻辑的时候,用脑子想一下程序逻辑,直接上机写代码;复杂的逻辑,借助下图画梳理思路,然后再写代码。梳理逻辑思路的时候,记录下关键点,这类关键点通常是条件语句,如if的条件,循环的条件,迭代停止的条件等。
下面把代码贴在下边,欢迎大家给出不同实现。
class="java"> public static void main(String[] args) { int[] data={100,50,20,10,5,1};//人民币面值,纸币 int[] count={0,0,0,0,0,0}; int goal=550;//目标计算金额 //==========计算各面值的数量======================================== for(int i=0;i<data.length;i++){ if(i!=0){ goal=goal-data[i-1]*count[i-1];//计算上一面值的零头 } for(int j=0;data[i]*j<=goal;j++){ count[i]=j; } } //==========输出面值及对应数量======================================== for(int i:data){ System.out.print(i+"\t"); } System.out.println(); for(int i:count){ System.out.print(i+"\t"); } }
?
?