第二次学习总结
一:三种排序
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;
}