本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.汉诺塔问题:有一个梵塔,塔内有三个座儿A, B, C. A座上有n个盘子,盘子大小不等,大的在下,小的在上。问:如何把盘子从A座移动到C座,要求每次只允许移动一个盘子,并且在移动过程中,3个座上的盘子适中保持大盘在下,小盘在上,移动过程中可以使用B座作为中转。输出移动的步骤。(用递归调用实现)
#include <stdio.h>
int i=1;
void m(int x,char a,char c){
printf("第%d步:把第%d个盘子从%c移到%c\n",i++,x,a,c);
}
void h(int x,char a,char b,char c){
if(x==1)
m(x,a,c);
else{
h(x-1,a,c,b);
m(x,a,c);
h(x-1,b,a,c);
}
}
void main(){
int x;
char a='A',b='B',c='C';
printf("A塔上有几个盘子?\n");
scanf("%d",&x);
h(x,a,b,c);
}
2.编写一个函数实现二分查找算法,并在主函数中进行测试
#include <stdio.h>
//low和high仅仅是用来计算mid和调整mid所在区间,以便于arr[mid]和目标元素比较。low,high和mid都是元素的下标。
int binarysearch(int a[],int high,int low,int x){
if (low>high)
return -1;
int mid;
mid=(high+low)/2;
if(x>a[mid])
binarysearch(a,high,mid+1,x);
else if(x<a[mid])
binarysearch(a,mid-1,low,x);
else return mid;
}
void main(){
int a[5]={1,3,5,7,9},low=0,high=sizeof(a)/sizeof(a[0])-1,x,i;
scanf("%d",&x);
i=binarysearch(a,high,low,x);
if(i==-1)
printf("no");
else
printf("%d",i);
}
3.编写函数实现冒泡排序算法对数组元素进行降序排序,并在主函数中对其进行测试,要求主函数中输出排序前及排序后的结果
#include <stdio.h>
void bubblesort(int a[],int l){
int i,j,k;
for (i=0;i<l-1;i++){
for(j=0;j<l-1-i;j++){
if(a[j]>a[j+1]){
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
}
void main(){
int a[10],l=sizeof(a)/sizeof(a[0]),i;
for(i=0;i<l;i++){
a[i]=9-i;
}
for(i=0;i<l;i++){
printf("%d ",a[i]);
}
printf("\n");
bubblesort(a,l);
for(i=0;i<l;i++){
printf("%d ",a[i]);
}
}