大连理工大学C语言题目(二)

151 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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]);
	}
}