2、在要求将A上的盘全都移到C上,在移的过程中要遵循以下原则:每次只能移动一个盘;圆盘可以插在A、B和C任一个塔座上;在任何时刻,大盘不能放在小盘的上面。hanoi问题递归求解思想:我们把一个规模为n的hanoi问题:1到n号盘按照移动规则从A上借助B移到C上表示为H(A,B,C,n);原问题划分成如下三个子问题:(1)将1到n-1号盘按照移动规则从A上借助C移到B上H(A,C,B,n-1);(2)将n号盘从A上直接移到C上;(3)将1到n-1号盘按照移动规则从B上借助A移到C上H(B,A,C,n-1);经过三个子问题求解,原问题的也即求解完成。29hanoi问题递归求解代码:voi
3、dH(charA,charB,charC,intn){if(n>0){H(A,C,B,n-1);printf(“%dfrom%cto%c”,n,A,C);H(B,A,C,n-1);}}-c语言实验代码:#includevoidhanoi(intn,charX,charY,charZ){if(n==1)printf("把%c移动到%c",X,Z);else{hanoi(n-1,X,Z,Y);printf("把%c移动到%c",X,Z);hanoi(n-1,Y,X,Z);}}main(){intm;printf("请输入盘子的数目:");scanf("%d"
4、,&m);printf("要移动的盘子执行的步骤为:%d",m);hanoi(m,'A','B','C');}实验结果:292、二分查找问题(1)设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。***********************************************************代码显示:#includeintbinarySearch(inta[],intn,intx,int&
5、i,int&j)//a[]为要搜索的数组;n为数组元素的个数;x为要查询的元素值;//i为小于x的最大元素位置;j为大于x的最小元素的位置{intmiddle;//中值intright=n-1;//数组的右边界intleft=0;//数组的左边界29while(left<=right){middle=(left+right)/2;if(x==a[middle]){i=j=middle;returnmiddle;}if(x>a[middle])left=middle+1;else//2016年11月3日测试成功。right=middle-1;i=right;j=left;}retu
6、rn-1;//查询失败}intmain(void){inti;29intj;intmiddle;intb[]={1,2,3,4,5,6,7,8,12,22};//用来测试的数组middle=binarySearch(b,10,13,i,j);//调用二分搜索算法if(middle!=-1)//查询成功{printf("thex'spositionis:%d,iis%d,jis%d",middle,i,j);}else//查询失败{printf("找不到这个元素:%d,jis%d",i,j);}return0;}结果显示:29方法二:如果存在,必须返回下标#include<
7、iostream>usingnamespacestd;constintSIZE=12;intbinarySearch(intArray[],intx,intn,int&a,int&b){intleft=0;intright=n-1;intmiddle;while(left<=right){middle=(left+right)/2;if(x==Array[middle]){a=b=middle;return0;}if(x>Array[middle])left=middle+1;e