2021-04-18

                          第二次学习总结

一:三种排序
1 冒泡排序

冒泡从小到大
	#include<stdio.h>
	int main(){
		int arr[10]={1,4,78,9,6,90,34,5,45,10};
		int i,j,t;
		for(i=0;i<10-1;i++){//冒泡趟数 
			for(j=0;j<10-i-1;j++){//比较次数
			if(arr[j]>arr[j+1]){
				t=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=t;} 
				}
			}
		for(i=0;i<10;i++){
			printf("%d ",arr[i]);
		}
		return 0;

2 交换排序

#include<stdio.h>
int main(){
		int arr[10]={1,4,78,9,6,90,34,5,45,10};
		int i,j,t;
		for(i=0;i<10-1;i++){//确定n-1个位置
			for(j=i+1;j<10;j++){//比较次数 
				if(arr[i]>arr[j]){
					t=arr[i];
					arr[i]=arr[j];
					arr[j]=t;
				}
			} 
		}
		for(i=0;i<10;i++){
			printf(" %d",arr[i]);
		} 
		return 0;
	} 

3 选择排序

#include<stdio.h>
int main(){
		int arr[10]={1,4,78,9,6,90,34,5,45,10};
		int i,j,t;
		for(i=0;i<10-1;i++){//确定前n-1个位置
			int k=i;
			for(j=i+1;j<10;j++){//比较的次数
				if(arr[k]>arr[j]){
					k=j;
				} 
			} 
			t=arr[i];
			arr[i]=arr[k];
			arr[k]=t;
			
		}    
		for(i=0;i<10-1;i++){
			printf("%d ",arr[i]);
		}                   
		return 0;

总结:三种排序外层循环都一样,可以理解为确定N-1个位置,冒泡排序和交换排序的相同点是都需要比较并且交换,选择排序可以理解为交换排序的进阶版,利用变量k而减少了交换次数。

二:递归的深入理解
1 已知递归结束条件,先递推到条件,再回归求解。可以理解为已知N-1的值,求解N的值。
例如:

//求解n层嵌套平方根 
	double MM(double x,int n){
		if(n==0)
		return 0;
		else
		return sqrt(x+MM(x,n-1));
		}
	int main(){
		int n;
		double x;
		printf("Please input x and n:");
		scanf("%lf,%d",&x,&n);
		printf( "Result=%.2f\n",MM(x,n));
		return 0;
	}

2 由一个已知值递推到某求解值,已知值与求解值有层层递推的关系
例如:

//猴吃桃问题 
	int MM(int n,int x){
		
		if(n==1)
		return x;
		else
		return MM(n-1,(x+1)*2);
		
	}
	int main(){
		int n,x=1;
		printf("Input days n:");
		scanf( "%d",&n);
		printf("x=%d\n",MM(n,x));
		return 0;
	}

三:数组的使用
自我理解:数组可以记录一组方便以后要用的数据,还有数组巧妙的计数功能
例如:

//判断一个整型数据有几位 
#include<stdio.h>
int main(){
	int i, n,arr[100],b,c,j;
	printf("Please enter the number:\n");
	scanf("%d",&n);
	b=n;
	if(n<0){b=(-1)*n;}
	
	for(i=0;b!=0;i++){
		arr[i]=b%10;
		b/=10;
		c++;
	}
	printf("%d: %d bits\n",n,c);
	int brr[10]={0};
	for(i=0;i<10;i++){
		for(j=0;j<c;j++){
			if(arr[j]==i){
				brr[i]++; 
				
			}
		}
	}
	for(i=0;i<10;i++){
		if(brr[i]!=0){
			printf("%d: %d\n",i,brr[i]);
		}
	}
	return 0;
}
#include<stdio.h>
void DIDE(long a,int arr[],int m,int n){
	for(;m<=n;m++){
		arr[m]=a%10;
		a/=10;
	}
}
int TURE(int arr[]){
	int i;
	int brr[10]={0};
	for(i=0;i<10;i++){
		brr[arr[i]]++;}
		
	for(i=0;i<10;i++){
		if(brr[i]!=1)return 0;
		
	}
	return 1;
}
int main(){
	int n;
	long x,y;
	int i,arr[10];
	for(n=10;n<=21;n++){
			x=n*n*n;
	        y=x*n;
	        DIDE(x,arr,0,3);
	        DIDE(y,arr,4,9);
	        if(TURE(arr))
	        printf("age=%d\n",n);
	
	}

	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值