我的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

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

原文地址:https://www.cnblogs.com/vanwoos/p/4498458.html