zoukankan      html  css  js  c++  java
  • 2015数据结构上机考试题解

    #include<cstdio>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=10000;
    
    using namespace std;
    
    int n,m,q;
    
    int a[maxn+10];
    
    int bs(int x){
       int l=0,r=n-1;
       while(l<=r){
            int mid=(l+r)>>1;
            if(a[mid]==x) return 1;
            else if(a[mid]>x) r=mid-1;
            else l=mid+1;
       }
       return 0;
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        scanf("%d",&m);
        while(m--){
            scanf("%d",&q);
            if(bs(q)) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    1001
    #include<cstdio>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=10000;
    
    using namespace std;
    
    int n,a[maxn+10];
    
    void QuickSort(int a[],int l,int r){
         if(l<r){
            int t=a[l];
            int low=l,high=r;
            while(low<high){
                while(low<high&&a[high]>=t) high--;
                a[low]=a[high];
                while(low<high&&a[low]<=t) low++;
                a[high]=a[low];
            }
            a[low]=t;
            QuickSort(a,l,low-1);
            QuickSort(a,low+1,r);
         }
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        QuickSort(a,1,n);
        for(int i=1;i<=n;i++) printf("%d
    ",a[i]);
        return 0;
    }
    1003
    #include <cstdio>
    #include <string.h>
    #include <stdlib.h>
    #define inf 0x3f3f3f3f
    
    const int maxn=1000;
    
    using namespace std;
    
    typedef struct node{
      int data;
      struct node *lch,*rch;
    }bstnode,*bstree;
    
    int n,v,cnt,x;
    
    bool searchbst(bstree &t,int v,bstree f,bstree &p){
            if(!t){
             p=f;
             return 0;
            } else {
                if(t->data==v) {
                    p=t;
                    return 1;
                } else if(t->data>v) return searchbst(t->lch,v,t,p);
                else return searchbst(t->rch,v,t,p);
            }
    }
    
    void bstinsert(bstree &t,int v){
         bstree s,p;
         if(!searchbst(t,v,NULL,p)){
            s=(bstnode*)malloc(sizeof(bstnode));
            s->lch=s->rch=NULL;
            s->data=v;
            if(!p) {
                    t=s;
            } else if(s->data>p->data) p->rch=s;
            else p->lch=s;
         }
    }
    
    void pre_order(bstree t){
       if(t){
            if(t->data>=x)
            {printf("%d
    ",t->data);cnt++;}
            pre_order(t->lch);
            pre_order(t->rch);
       }
    }
    
    int main()
    {
        bstree t=NULL;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&v);
            bstinsert(t,v);
        }
        scanf("%d",&x);
        pre_order(t);
        printf("%d
    ",cnt);
        return 0;
    }
    1015
    #include<cstdio>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=1000;
    
    using namespace std;
    
    int n;
    
    int flag[maxn+10];
    
    int cost[maxn+10][maxn+10];
    
    int d[maxn+10];
    
    void dijkstra(int s){
         for(int i=1;i<=n;i++) d[i]=10000;
         d[s]=0;
         //flag[s]=1;
         while(1){
            int v=-1;
            for(int u=1;u<=n;u++) if(!flag[u]&&(v==-1||d[u]<d[v])) v=u;
            if(v==-1) break;
            flag[v]=1;
            for(int u=1;u<=n;u++){
                    if(!flag[u]&&d[u]>d[v]+cost[v][u]){
                            d[u]=d[v]+cost[v][u];
            }
            }
         }
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            scanf("%d",&cost[i][j]);
        dijkstra(1);
        for(int i=1;i<=n;i++)
            if(i==1) printf("%d",d[i]);
        else printf(" %d",d[i]);
        printf("
    ");
        return 0;
    }
    1440
    #include <cstdio>
    #include <string.h>
    #define inf 0x3f3f3f3f
    
    const int maxn=10000;
    
    using namespace std;
    
    int f;
    
    char a[maxn+10];
    
    int main()
    {
        scanf("%s",a);
        for(int i=0,j=strlen(a)-1;i<j;i++,j--){
            if(a[i]!=a[j]){
                    f=1;
                    printf("No
    ");
            }
        }
        if(!f) printf("Yes
    ");
        return 0;
    }
    1480
    #include <iostream>
    #include <cstdio>
    #include <string.h>
    #include <stdlib.h>
    #include <queue>
    #include <algorithm>
    #define inf 0x3f3f3f3f
    
    const int maxn=1000;
    
    using namespace std;
    
    typedef struct node{
       char a;
       int dep;
       int code;
       int v;
       struct node *lch,*rch;
       friend bool operator<(struct node a,struct node b){
            return a.v>b.v;
       }
    }hnode,*htree;
    
    htree root;
    
    int inde,count_num;
    
    hnode Node[maxn+10];
    
    char a[maxn+10],b[maxn+10];
    
    int deep[maxn+10],cod[maxn+10];
    
    priority_queue<hnode> pq;
    
    void haffman(){
        for(int i=0;i<=inde;i++)
            pq.push(Node[i]);
        while(pq.size()>1){
            //printf("1
    ");
            htree h1=(hnode*)malloc(sizeof(hnode));
            *h1=pq.top();pq.pop();
            htree h2=(hnode*)malloc(sizeof(hnode));
            *h2=pq.top();pq.pop();
            hnode h3;
            h3.a=0;
            h3.lch=h1,h3.rch=h2;
            h3.v=h1->v+h2->v;
            pq.push(h3);
        }
        *root=pq.top();
        pq.pop();
        root->code=0;
        root->dep=0;
        queue<node> q;
        q.push(*root);
        while(!q.empty()){
            //printf("1
    ");
            node h=q.front();
            //printf("%c
    ",h.a);
            q.pop();
            if(h.a!=0) {
                 //printf("%c %d
    ",h.a,h.code);
                 deep[h.a-'a']=h.dep;
                 cod[h.a-'a']=h.code;
            }
            if(h.lch!=NULL){
                  //printf("100
    ");
                  h.lch->dep=h.dep+1;
                  h.lch->code=h.code*10;
                  //printf("%c
    ",h.lch->a);
                  q.push(*h.lch);
            }
            if(h.rch!=NULL){
                    //printf("100
    ");
                    h.rch->dep=h.dep+1;
                    h.rch->code=h.code*10+1;
                    //printf("%d
    ",h.code*10+1);
                    q.push(*h.rch);
            }
        }
    }
    
    int main()
    {
        gets(a);
        root=(hnode*)malloc(sizeof(htree));
        inde=0,count_num=1;
        sort(a,a+strlen(a));
        for(int i=1;i<strlen(a);i++){
            if(a[i]!=a[i-1]){
                   Node[inde].v=count_num;
                   Node[inde++].a=a[i-1];
                   count_num=1;
            } else count_num++;
        }
        Node[inde].a=a[int(strlen(a))-1];
        Node[inde].v=count_num;
       // printf("%d
    ",inde);
        //printf("%c
    ",a[strlen(a)-1]);
        haffman();
        gets(b);
        for(int i=0;i<strlen(b);i++){
            printf("%0*d",deep[b[i]-'a'],cod[b[i]-'a']);
            //printf("%c %d %d
    ",b[i],deep[b[i]-'a'],cod[b[i]-'a']);
        }
        printf("
    ");
        cout<<b<<endl;
        return 0;
    }
    1520
  • 相关阅读:
    backup archivelog delete input 与delete all input 区别
    RMAN LIST
    RMAN '异机异目录恢复'
    linux系统日志解析
    rman备份丢失控制文件,利用dbms_backup_restore恢复
    同义词的妙用
    上季度的老毛病又来了
    ORA20446,再次遭遇oracle bug
    修改RAC VIP IP
    数据库慢,原来与数据库无关
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5608801.html
Copyright © 2011-2022 走看看