程序设计中的交换思想
问题:用程序模拟两个容器的内容交换。比如a=A,b=B,变成a=B,b=A。
乍一看,这个好像是个很简单的问题,可是似乎又有些不知怎么下手,这大概是大多数初学者遇到的现象。其实这也正常,一个与程序没有多少关系的问题,摆在我们的面前,我们自然会用程序的逻辑思维去看待。但是,你要记住一句话,程序就是生活。程序就是来解决生活中的问题的,两者直接必然有内在的联系,只是表现形式有所不同而已。上面的这个问题,如果我们把它放到生活中,你能不能做到呢?试想一下,两个盆子,一个装油,一个装水,你要把它们换过来,你是不是需要另一个容器来临时中转一下?想到了这一点,用Java来模拟就自然轻而易举了。
public static void main(String[] a){
String a="水";
Sring b="油";
//另一个盘子
String c;
//腾出装水的盘子
c=a;
//把油放到水的盘子里去,腾出放油的盘子
a=b;
//把水放到放油的盘子
b=c;
System.out.println("a:"+a+",b:"+b);
}
再来看看这种交换思想在其他案例中的运用。
有一个数列,叫斐波那契数列。看看它的各项就知道这个数列的规律了,{1,1,2,3,5,8,13,21,34,55......}从第三项开始,每一项都是前两项的和。
用Java来输出它的前10列吧。
我们需要做的就是不断的把n,n-1,n-2之间的值进行交换。
第一种方式,使用数组。
public static void main(String[] args){
int[] a=new int[10];
a[0]=1;
a[1]=1;
for(int i=0;i<10;i++){
if(i<2){
System.out.print("1,");
}else{
a=a[i-1]+a[i-2];//循环交换
System.out.print(a+",");
}
}
}
第二种方式。使用变量直接交换
public static void main(String[] args){
int a1=1;
int a2=1;
int a3;
for(int i=1;i<=10;i++){
if(i<3){
System.out.print("1,");
}else{
a3=a1+a2;
//仔细体会下交换过程
a1=a2;
a2=a3;
System.out.print(a3+",");
}
}
}
其他诸如递归的方式与交换无关,不在此说明。
记住,程序就是生活。碰到程序上的难题时,不妨把它放到生活中去想想看。
|