分类 PAT 下的文章

#include <cstdio>

int binarySearch(int A[],int left,int right,int x){
    //[left,right],初值[0,n-1]。
    int mid;
    //left和right的中点。
    while(left<=right){     //如果left>right就没有闭区间了。
        mid=(left+right)/2; //取中点。
        if(A[mid]==x)   return mid; //找x,返回下标。
        else if(A[mid]>x){  //中间数大于x。
            right=mid-1;    //左子区间[left,mid-1]查找。
        }else{              //中间数小于x。
            left=mid+1;     //右子区间[mid+1,right]查找。
        }
    }
    return -1;
}

int main(){
    const int n=10;
    int A[n]={1,3,4,6,7,8,10,11,12,15};
    printf("%d %d\n",binarySearch(A,0,n-1,6),binarySearch(A,0,n-1,9));
    return 0;
}

枚举,最小的放在第一个,先排再比。

#include <cstdio>
#define N 10

int main(){
    int a[N];
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    int i,j,t;
    for(i=1;i<N;i++){    //从大到小插入排序 
        t=a[i];            //将等待插入的元素保存在t里 
        for(j=i;j>0&&a[j-1]>t;j--)    //把比t大的元素后移 
        a[j]=a[j-1];
        if(j!=i)    a[j]=t;        //将t插入到j 
    }
    for(i=0;i<N;i++){
        printf("%5d",a[i]);
    }
}

数列前几项为1,1,2,3,5,8,13,21,..。
是满足F(0)=1,F(1)=1,【递归边界】
F(n)=F(n-1)+F(n-2) (n>=2)的数列【递归式子】。

#include <cstdio>

int F(int n){
    if(n==0||n==1)  return 1;
    else return F(n-1)+F(n-2);
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",F(n));
    return 0;
}

对一个序列A中的元素A[1]~A[i],令i从1到n枚举,进行n趟操作,每趟从待排序部分[i,n]中选择最小的元素,令其与待排序部分的第一个元素A[i]进行交换。n趟区间后,所有元素会是有序的。

枚举,最小的放在第一个,先比再排。

#include <cstdio>

int main(){
    int a[10];
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }

    for(int i=0;i<10;i++){
        for(int j=i+1;j<10;j++){
            if(a[i]<a[j]){
                int k=a[i];
                a[i]=a[j];
                a[j]=k;
            }
        }
    }

    for(int i=0;i<10;i++){
        printf("%5d",a[i]);
    }
}