zoukankan      html  css  js  c++  java
  • 2020.1.3计导全面复习

    //用宏定义替换文本 
    #include<iostream>
    #include<cstdio>
    #define p(m,n) printf("Hi,"#m"!
    ""...And "#n"~
    ")
    int main(){
        p(John,Amy);
    }
    //条件编译
    #include<iostream>
    #include<cstdio>
    #ifdef WIN32
    #define PLL "%I64d"
    #else
    #define PLL "%lld"
    #endif
    int main(){
        long long x;
        scanf("%lld",&x);
        printf(PLL"
    ",x);
    }
    //用带参宏计算圆的面积和周长
    #include<iostream>
    #include<cstdio>
    #define PI 3.1415926
    #define C(r) (2*PI*(r))
    #define S(r) (PI*(r)*(r))
    int main(){
        double x=1.2;
        printf("%lf
    %lf
    ",C(x),S(x));
        return 0;
    }
    //线性同余产生随机数
    #include<iostream>
    #include<cstdio>
    #include<ctime>
    #define maxn 100010
    const int a=975323;
    const int b=2333333;
    const int mod=152487967;
    using namespace std;
    int X[maxn];
    int main(){
        X[0]=time(0);
        for(int i=1;i<=10;i++){
            X[i]=(1LL*a*X[i-1]+b)%mod;
        }
        for(int i=1;i<=10;i++)
            printf("%d ",X[i]);
        return 0;
    }
    //冒泡排序+二分查找
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,a[1000];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<n;i++)
            for(int j=1;j<=n-i;j++)
                if(a[j]>a[j+1])swap(a[j],a[j+1]);
        int l=1,r=n,ans=0;
        for(int i=1;i<=n;i++)printf("%d ",a[i]);puts("");
        int x;scanf("%d",&x);
        while(l<=r){
            int mid=(l+r)>>1;
            if(a[mid]>=x){
                r=mid-1;
                ans=mid;
            }
            else l=mid+1;
        }
        printf("%d
    ",ans);
        return 0;
    } 
    //蒙特卡洛算法求积分
    #include<iostream>
    #include<ctime>
    #include<cstdlib>
    #include<cstdio>
    using namespace std;
    double l,r,up,down;
    double M,N;
    int main(){
        srand(time(0));rand();rand();
        double x,y;
        l=1;r=2;up=1;down=0;
        for(int i=1;i<=1000000;i++){
            x=1LL*rand()*rand()*rand()%10000000;
            y=1LL*rand()*rand()*rand()%10000000;
            x+=10000000;
            x=x/10000000.0;
            y=y/10000000.0;
            if(x>=1&&x<=2&&y>=0&&y<=1)M++;
            if(x>=1&&x<=2&&y>=0&&y<1.0/x)N++;
        }
        double ans=1.0*N/M;
        printf("%f
    ",ans);
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    int main(){
        srand(time(0));rand();rand();
        double x,y,M=0,N=0;
        for(int i=1;i<=10000000;i++){
            x=1LL*rand()*rand()*rand()%10000000;
            y=1LL*rand()*rand()*rand()%10000000;
            x/=10000000.0;
            y/=10000000.0;
            if(x<=1&&x>=0&&y<=1&&y>=0){
                M++;
                if(x*x+y*y<=1)N++;
            }
        }
        double ans=N*4.0/M;
        printf("%f",ans);
        return 0;
    }
    蒙特卡洛计算Π
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    void add(int x,int y){
        int ans=x+y;
        printf("%d
    ",ans);
    }
    void muli(int x,int y){
        int ans=x*y;
        printf("%d
    ",ans);
    }
    void power(int x,int y){
        int ans=pow(x,y);
        printf("%d
    ",ans);
    }
    void process(int x,int y,void (*pf)(int,int)){
        pf(x,y);
    }
    int main(){
        int x,y;
        scanf("%d%d",&x,&y);
        process(x,y,add); 
        process(x,y,muli);
        process(x,y,power);
        return 0;
    }
    函数指针
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<malloc.h>
    struct list{
        int data;
        list* next;
    };
    list* head;
    void creat_list(){
        head=(list*)malloc(sizeof(list));
        if(head==NULL)return;
        else {
            head->data=0;
            head->next=NULL;
        }
    }
    list* Insert(list* h,int x){
        list* t;
        t=(list*)malloc(sizeof(list));
        t->data=x;
        if(h==NULL||h->next==NULL){
            t->next=NULL;
            h->next=t;
            return h;
        }
        if(h->next->data>x){
            t->next=h->next;
            h->next=t;
            return h;
        }
        else {
            list* p=h->next;
            list* q=p->next;
            bool flag=0;
            while(q!=NULL){
                if(p->data<x&&q->data>=x){
                    t->next=q;
                    p->next=t;
                    flag=1;
                    break;
                }
                p=q;
                q=q->next;
            }
            if(!flag){
                t->next=NULL;
                p->next=t;
            }
            return h;
        }
    }
    void remove(list* h,int x){
        if(h==NULL||h->next==NULL)return;
        list* q=head->next;
        if(q->data==x){
            h->next=q->next;
            free(q);
            return;
        }
        else {
            if(q->next==NULL){
                if(q->data==x){
                    free(q);
                    h->next=NULL;
                }
                else return;
            }
            else {
                list* p=q->next;
                while(p!=NULL){
                    if(p->data==x){
                        q->next=p->next;
                        free(p);
                        return;
                    }
                }
            }
        }
    }
    void check(list* h){
        if(h==NULL||h->next==NULL)return;
        list* p=h->next;
        while(p!=NULL){
            printf("%d ",p->data);
            p=p->next;
        }
        puts("");
    }
    int main(){
        creat_list();
        int n,x;
        puts("输入数字的个数");
        scanf("%d",&n);
        puts("输入每个数字");
        for(int i=1;i<=n;i++){
            scanf("%d",&x);
            Insert(head,x);
        }
        check(head);
        puts("输入要删除的数字的个数");
        scanf("%d",&n);
        puts("输入要删除的数字");
        for(int i=1;i<=n;i++){
            scanf("%d",&x);
            remove(head,x);
        }
        check(head);
        return 0;
    }
    链表实现插入排序
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<malloc.h>
    #define Abs(x) ((x)>=0?(x):(-x))
    using namespace std;
    struct node{
        int a,b;//ϵÊýΪa£¬Ö¸ÊýΪb 
        node* next;
    };
    node *head[4];
    void creat_node(node* &h){
        h=(node*)malloc(sizeof(node));
        if(h==NULL)return;
        else{
            h->a=0;
            h->b=0;
            h->next=NULL;
            return;
        }
    }
    void Insert(node* &h,int x,int y){
        if(h==NULL||h->next==NULL){
            node *q;
            q=(node*)malloc(sizeof(node));
            q->a=x;
            q->b=y; 
            q->next=NULL;
            h->next=q;
            return;
        }
        else {
            node* p=h->next;
            node* q=h;
            node* t;
            t=(node*)malloc(sizeof(node));
            t->a=x;
            t->b=y;
            t->next=NULL;
            while(p!=NULL){
                q=p;
                p=p->next;
            }
            q->next=t;
            return;
        }
    }
    void reverse(node* &h){//°ÑÁ´±í·´×ª 
        if(h==NULL||h->next==NULL)return;
        node* p=h->next;
        node* q=h;
        node* t;
        bool flag=0;//ÅжÏÊÇ·ñÊÇÁ´±íµÄµÚÒ»¸öÔªËØ 
        while(p!=NULL){
            t=p->next;
            if(!flag)p->next=NULL,flag=1;
            else p->next=q;
            q=p;
            p=t;
        }
        h->next=q;
    }
    void calc1(node* &h1,node* &h2,node* &h3){
        creat_node(h3);
        node* p1=h1->next;
        node* p2=h2->next;
        node* p3;
        node* q=h3;
        while(p1!=NULL&&p2!=NULL){
            int x=(p1->a)+(p2->a);
            if(x!=0){
                p3=(node*)malloc(sizeof(node));
                p3->a=x;
                p3->b=p1->b;
                p3->next=NULL;
                q->next=p3;
                q=p3;
            }
            p1=p1->next;
            p2=p2->next;
        }
        while(p1!=NULL){//Ò×´í£¡²»ÄÜ°Ñp1Ö±½Ó¸³Öµ¸øq£¬·ñÔòhead[3]Á´±í»áÓÐÒ»²¿·ÖÖ¸Ïòhead[2]Á´±í£¬Á´±íÖ®¼äʧȥ¶ÀÁ¢ÐÔ 
            p3=(node*)malloc(sizeof(node));
            p3->a=p1->a;
            p3->b=p1->b;
            p3->next=p1->next;
            q->next=p3;
            q=q->next;
            p1=p1->next;
        }
        while(p2!=NULL){
            p3=(node*)malloc(sizeof(node));
            p3->a=p2->a;
            p3->b=p2->b;
            p3->next=p2->next;
            q->next=p3;
            q=q->next;
            p2=p2->next;
        }
    }
    void calc2(node* &h1,node* &h2,node* &h3){
        creat_node(h3);
        node* p1=h1->next;
        node* p2=h2->next;
        node* p3;
        node* q=h3;
        while(p1!=NULL&&p2!=NULL){
            int x=(p1->a)-(p2->a);
            if(x!=0){
                p3=(node*)malloc(sizeof(node));
                p3->a=x;
                p3->b=p1->b;
                p3->next=NULL;
                q->next=p3;
                q=p3;
            }
            p1=p1->next;
            p2=p2->next;
        }
        while(p1!=NULL){
            p3=(node*)malloc(sizeof(node));
            p3->a=p1->a;
            p3->b=p1->b;
            p3->next=p1->next;
            q->next=p3;
            q=q->next;
            p1=p1->next;
        }
        while(p2!=NULL){
            p3=(node*)malloc(sizeof(node));
            p3->a=-(p2->a);
            p3->b=p2->b;
            p3->next=p2->next;
            q->next=p3;
            q=q->next;
            p2=p2->next;
        }
    }
    void check(node* &h){
        if(h==NULL||h->next==NULL)return;
        node* q=h->next;
        bool flag=0;
        while(q->next!=NULL){
            if(!flag)printf("%d*x^%d",q->a,q->b),flag=1;
            else printf("%d*x^%d",Abs(q->a),q->b);
            if(q->next->a>0)printf(" + ");
            else printf(" - ");
            q=q->next;
        }
        if(q!=NULL)printf("%d*x^%d
    ",Abs(q->a),q->b);
    }
    int main(){
        //freopen("Cola.txt","r",stdin);
        int n,x;
        creat_node(head[1]);
        creat_node(head[2]);
        //------------------------------------------------- 
        puts("ÇëÊäÈëµÚÒ»¸ö¶àÏîʽµÄÏîÊý:");
        scanf("%d",&n);
        puts("ÇëÒÀ´ÎÊäÈëÿһÏîµÄϵÊý:");
    //    creat_node(head[1]);
        for(int i=n-1;i>=0;i--){
            scanf("%d",&x);
            Insert(head[1],x,i);
        }
    //    check(head[1]); 
        reverse(head[1]); 
    //    check(head[1]);
        //-------------------------------------------------- 
        puts("ÇëÊäÈëµÚ¶þ¸ö¶àÏîʽµÄÏîÊý:");
        scanf("%d",&n);
        puts("ÇëÒÀ´ÎÊäÈëÿһÏîµÄϵÊý:");
    //    creat_node(head[2]);
        for(int i=n-1;i>=0;i--){
            scanf("%d",&x);
            Insert(head[2],x,i);
        }
    //    check(head[2]);
        reverse(head[2]);
    //    check(head[2]);
        //---------------------------------------------------- 
        puts("Á½¶àÏîʽ֮ºÍΪ:");
        calc1(head[1],head[2],head[3]);//¼Ó·¨ÔËËã 
        reverse(head[3]);
        check(head[3]);
        free(head[3]);
        //----------------------------------------------------- 
        puts("Á½¶àÏîʽ֮²îΪ:");
        calc2(head[1],head[2],head[3]);//¼õ·¨ÔËËã 
        reverse(head[3]);
        check(head[3]);
        
        return 0;
    }
    链表计算多项式加减法
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    void Creat(char *name,int sz){
        FILE *fp=fopen(name,"w+");
        if(fp!=NULL){
            puts("此文件已存在,是否覆盖该文件?");
            puts("1.是");
            puts("2.否");
            int op;
            scanf("%d",&op);
            if(op==2)return;
        }
        fseek(fp,sz*1024-1,SEEK_SET);
        putw(32,fp);
        puts("文件创建成功!");
        fclose(fp); 
    }
    int main(){
        char name[100];
        int sz;
        puts("请输入要创建的文件名称");
        scanf("%s",name);
        puts("请输入要预留的空间大小(单位为K)");
        scanf("%d",&sz);
        Creat(name,sz);
        return 0;
    }
    创建文件并预留空间
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    char name[10][10]; 
    int main(){
        FILE *fp,*fq;
        puts("请输入第一个文件的名称"); 
        scanf("%s",name[1]);
        if((fopen(name[1],"r"))==NULL){//文件不存在 
            printf("文件%s不存在
    ",name[1]);
    //        puts("程序已退出");
            exit(0);
        }
        printf("已成功打开文件%s
    ",name);
        fp=fopen(name[1],"r");
        puts("请输入第二个文件的名称");
        scanf("%s",name[2]);
        if(fopen(name[2],"r")){//文件已存在 
            printf("该文件已存在,是否允许覆盖文件%s
    ",name[2]);
            puts("1.是");
            puts("2.否");
            int op;
            scanf("%d",&op);
            if(op==2){
    //            puts("程序已退出");
                exit(0);
            }
            else {
                fq=fopen(name[2],"w");
            }
        }
        else fq=fopen(name[2],"w");
        char ch;
        do{
            ch=fgetc(fp);
            fputc(ch,fq);
        }while(ch!=EOF);
        puts("文件复制成功");
        return 0;
    }
    将一个文件复制到另一个文件中
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    struct node{
        int data;
        node *next;
    };
    int main(){
        int i,j,k,m,n;
        node *h,*p,*q;
        scanf("%d%d",&n,&m);
        h=(node*)malloc(sizeof(node));
        h->data=1;
        h->next=h;
        p=h;
        for(i=2;i<=n;i++){
            q=(node*)malloc(sizeof(node));
            q->data=i;
            q->next=p->next;
            p->next=q;
            p=q;
        }
        p=h;
        k=1;//µ±Ç°Ëù±¨µÄÊý 
        while(p->next!=p){
            if(k<m-1){
                k++;
                p=p->next;
            }
            else if(k==m-1){
                q=p->next;
                p->next=p->next->next;
                printf("%d--",q->data);
                free(q);
                k=1;
                p=p->next;
            }
        }
        printf("%d
    ",p->data);
        return 0;
    }
    malloc、结构体和指针实现约瑟夫环
    #include<iostream>
    #include<cstdio>
    #include<malloc.h>
    using namespace std;
    int n;
    struct Tree{
        int data,v;
        Tree *lson;
        Tree *rson;
    };
    Tree *p,*root;
    void Insert(int x){
        Tree *q;
    //    q=(Tree*)malloc(sizeof(Tree));
        q=root;
        while(1){
            if((p->v)>=(q->v)){
                if(q->rson==NULL){
                    q->rson=p;
                    return;
                }
                else {
                    q=q->rson;
                }
            }
            else {
                if(q->lson==NULL){
                    q->lson=p;
                    return;
                }
                else {
                    q=q->lson;
                }
            }
        }
    }
    void dfs(Tree *q){
        printf("%d ",q->v);
        if(q->lson!=NULL)
            dfs(q->lson);
        if(q->rson!=NULL)
            dfs(q->rson);
    }
    int main(){
        freopen("Cola.txt","r",stdin);
        int x;
        scanf("%d",&n);
        root=(Tree*)malloc(sizeof(Tree));
        scanf("%d",&x);
        root->data=1;
        root->v=x;
        root->lson=NULL;
        root->rson=NULL;
        for(int i=2;i<=n;i++){
            scanf("%d",&x);
            p=(Tree*)malloc(sizeof(Tree));
            p->data=i;
            p->v=x;
            p->lson=NULL;
            p->rson=NULL;
            Insert(x);
        }
        dfs(root);
        return 0;
    }
    malloc、结构体和指针实现二叉排序树
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,a[1000],b[1000];
    void merge(int l,int r){
        if(l==r)return;
        int mid=(l+r)>>1;
        merge(l,mid);merge(mid+1,r);
        int i=l,j=mid+1;
        memset(b,0,sizeof(b));
        int cnt=0;
        while(i<=mid&&j<=r){
            if(a[i]<a[j]){
                b[++cnt]=a[i++];
            }
            else {
                b[++cnt]=a[j++];
            }
        }
        while(i<=mid)b[++cnt]=a[i++];
        while(j<=r)b[++cnt]=a[j++];
        for(i=l,j=1;i<=r;i++,j++)a[i]=b[j];
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        merge(1,n);
        for(int i=1;i<=n;i++)printf("%d ",a[i]);
        return 0;
    } 
    归并排序
  • 相关阅读:
    Laravel 服务容器、服务提供器、契约实例讲解
    通过event记录sql
    laravel log改为时间格式
    array_column函数
    linux 安装ssh以及ssh用法与免密登录
    scp复制文件到远程服务器上
    nginx配置ssl证书后无法访问https
    Mac 在terminal 上用命令打开sublime
    Mac上通过iterm 上传文件到服务器
    基于visual Studio2013解决算法导论之044最短路径
  • 原文地址:https://www.cnblogs.com/thmyl/p/12146270.html
Copyright © 2011-2022 走看看