• 我的2015年ccf的解答


    只做了前三个题,在本地调试好了,不知为什么错了,好歹做了那么久,就记录一下了(注:这不是标准答案,只是我给出的解答)

    这是第一题的代码:

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct ar{
        int a[1000];
        struct ar *next;
    }arNode;
    
    void insert(arNode *p,int x,int i,int j,int n,int m)
    {
        int i2,j2,i3,j3;
        i2=m-(j+1);
        j2=i;
    
    
        for(i3=0;i3<=i2;++i3)
        {
            p=p->next;
            p->a[j2]=x;
        }
    
        
    }
    
    void showResult(arNode *p,int n,int m)
    {
        int i,j;
        for(i=0;i<m;++i)
        {
            p=p->next;
            for(j=0;j<n;++j)
            {
                printf("%d ",p->a[j]);
            }
            printf("
    ");
        }
    }
    
    int main()
    {
        arNode *L,*p;
        int m,n,i,j,x;
    
        L=(arNode *)malloc(sizeof(arNode));
        L->next=NULL;
        p=L;
        for(i=0;i<1000;++i)
        {
            p->next=(arNode *)malloc(sizeof(arNode));
            p->next->next=NULL;
            p=p->next;
        }
        scanf("%d %d",&n,&m);
        fflush(stdin);
        for(i=0;i<n;++i)
        {
            for(j=0;j<m;++j)
            {
                scanf("%d",&x);
                insert(L,x,i,j,n,m);
            }
        }
    
        showResult(L,n,m);
        return 0;
    }
    View Code

    这是第二题的代码:

    #include<stdio.h>
    struct ar{
        int n;
        int t;
    }a[1000];
    int nn=0;
    void insert(int x)
    {
        int i;
        for(i=0;i<nn;++i)
        {
            if(a[i].n==x)
                break;
        }
        if(i<nn)
        {
            ++a[i].t;
        }
        else{
            a[nn].n=x;
            a[nn].t=1;
            ++nn;
        }
    }
    
    void output()
    {
        int i;
        for(i=0;i<nn;++i)
        {
            printf("%d %d
    ",a[i].n,a[i].t);
        }
    }
    
    
    void pai()
    {
        int i,j,k,tmp,index;
        struct ar ttt;
        for(i=0;i<nn;++i)
        {
            for(j=i;j<nn;++j)
            {
                if(a[i].n>a[j].n)
                {
                    ttt=a[i];
                    a[i]=a[j];
                    a[j]=ttt;
                }
            }
        }
        for(i=0;i<nn;++i)
        {
            index=i;
            for(j=i;j<nn;++j)
            {
                if(a[index].t<a[j].t)
                {
                    index=j;
                }
            }
            ttt=a[index];
            for(k=index;k>i;--k)
            {
                a[k]=a[k-1];
            }
            a[i]=ttt;
        }
    }
    
    int main()
    {
    
        int n,i,x;
        scanf("%d",&n);
        fflush(stdin);
        for(i=0;i<n;++i)
        {
            scanf("%d",&x);
            insert(x);
        }
        pai();
    
        output();
        return 0;
    }
    View Code

    这是第三题的代码:

    #include<stdio.h>
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int daysYear(int year)//返回某年有多少天
    {
        if(!(year%400))
            return 366;
        else{
            if(!(year%4) && (year%100))
            {
                return 366;
            }else{
                return 365;
            }
        }
    }
    
    int week(int year,int month)//返回某年某月1日是星期几
    {
        int i,sum=0,result;
        for(i=1850;i<year;++i)
        {
            sum+=daysYear(i);
        }
        for(i=1;i<month;++i)
        {
            if((daysYear(year)==366) && i==2)
            {
                sum+=29;
            }
            else{
                sum+=a[i];
            }
        }
        result=(sum+2)%7;
        return result==0?7:result;
    }
    
    int jihao(int year,int month,int b,int c)
    {
        int yihao,count,d;
        yihao=week(year,month);//1号是星期几
        d=(daysYear(year)==366 && month==2)?30:a[month];//本月天数
        if(c>=yihao)
        {
            count=(b-1)*7+(c-yihao)+1;
        }else{
            count=b*7-(yihao-c)+1;
        }
        if(count>d)
        {
            count=0;
        }
        return count;
    }
    int main()
    {
        int a1,b1,c1,year1,year2,i;
        scanf("%d %d %d %d %d",&a1,&b1,&c1,&year1,&year2);
        for(i=year1;i<=year2;++i)
        {
            if(jihao(i,a1,b1,c1)==0)
            {printf("none
    ");}
            else{
                printf("%d/%.2d/%.2d
    ",i,a1,jihao(i,a1,b1,c1));
            }
        }
        //printf("%d",jihao(2015,5,2,7));
        return 0;
    }
    View Code

    就做出这三个题。。。。。。

  • 相关阅读:
    一个关于Delphi XML处理单元的BUG
    弹出一个非阻塞对话框
    更新Delphi中SVN客户端版本的方法
    程序只允许运行一个+重复运行程序提前
    Reverse Words in a String
    How to define Servlet filter order of execution using annotations
    Understanding and Using Servlet Filters
    Observer Pattern
    javascript 比较
    SOAP vs REST
  • 原文地址:https://www.cnblogs.com/vanwoos/p/4498458.html
Copyright © 2020-2023  润新知