前言:
学习了翁恺老师的Java课程,真的让我受益良多,下面是一个整钱拆分问题,大概思路与C中的百钱百鸡问题类似,都是运用多重循环,穷举所有的可能,关键点在于每一次的循环次数;
下面是初始源码:
package L;
import java.util.Scanner;
public class couyingbi {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
int amount= in.nextInt();
OUT:
for(int one=0;one<=amount;++one)
{
for(int five=0;five<=amount/5;++five)
{
for(int ten=0;ten<=amount/10;++ten)
{
for(int twenty=0;twenty<=amount/20;++twenty)
{
if(one+five*5+ten*10+five*5+twenty*20==amount)
{
System.out.println(one+"张1元"+five+"张5元"+ten+"张10元"+twenty+"张20元");
}
}
}
}
}
}
}
下面是输出结果:
你会发现输出了很多种情况,那么如果你只想要输出一种结果呢?
这时你可能会想到break;
好,那么接下来我们试试加上break;
你会发现他依旧是输出了很多结果,如果细心的同学可能会发现之前的源码中有一行多余的OUT:
哪么,这真的是多余的吗?
答案当然不是啦!这就是break的高级用法的关键之处,在最外层循环那里写一行代码,加上break,就可以跳到最外层循环,当然名字可以自己取,不一定是要OUT,
好,接下来就是见证奇迹的时候了!
package L;
import java.util.Scanner;
public class couyingbi {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
int amount= in.nextInt();
OUT:
for(int one=0;one<=amount;++one)
{
for(int five=0;five<=amount/5;++five)
{
for(int ten=0;ten<=amount/10;++ten)
{
for(int twenty=0;twenty<=amount/20;++twenty)
{
if(one+five*5+ten*10+five*5+twenty*20==amount)
{
System.out.println(one+"张1元"+five+"张5元"+ten+"张10元"+twenty+"张20元");
break OUT;
}
}
}
}
}
}
}