• 《实验数据的结构化程序设计》 2.4.4Calendar个人意见,寻求指引


    题目大意:

      制作一个日历系统,输入年份。一些周年纪念日,及服务要求日期,依据要求日期输出,输出重要程度小于发生日期的周年纪念日。


    题目地址:

      UVA  145


    个人见解:

      纯模拟,在闰年,输出顺序及输出范围可能跨年上有坑。攻克了这些后,依然困了我十多天,一直没过,求指导。

      我的程序里先读入周年纪念日,l代表周年纪念日的数量,每读入一个服务日期。调用f()函数,f()函数里先计算每日期相对于当年月号的日期。然后Is()函数推断是否要输出并将要输出移至数组前方,k代表要输出的周年纪念日的数量,最后按日期。重要程度。输入先后排序,输出。


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int d[1000],m[1000],n[1000],p[1000],q[1000];
    int y,i,j,k,l;
    char s[1000][255];
    int Is(int i,int j)
    {
        int x,z;
        if (n[i]>=n[0]) x=n[i]-n[0];
        else x=n[i]+365+y-n[0];
        if (n[j]>=n[0]) z=n[j]-n[0];
        else z=n[j]+365+y-n[0];
        if (x>z) return 1;
        else if (x==z&&p[i]<p[j]) return 1;
        else if (x==z&&p[i]==p[j]&&q[i]>q[j]) return 1;
        else return 0;
    }
    int swap(int i,int j)
    {
        int t;
        char c[255];
        t=d[i];
        d[i]=d[j];
        d[j]=t;
        t=m[i];
        m[i]=m[j];
        m[j]=t;
        t=n[i];
        n[i]=n[j];
        n[j]=t;
        t=p[i];
        p[i]=p[j];
        p[j]=t;
        t=q[i];
        q[i]=q[j];
        q[j]=t;
        strcpy(c,s[i]);
        strcpy(s[i],s[j]);
        strcpy(s[j],c);
        return 0;
    }
    int f()
    {
        for (i=0;i<l;i++)
        {
            if (m[i]==1) n[i]=d[i];
            if (m[i]==2) n[i]=31+d[i];
            if (m[i]==3) n[i]=59+d[i];
            if (m[i]==4) n[i]=90+d[i];
            if (m[i]==5) n[i]=120+d[i];
            if (m[i]==6) n[i]=151+d[i];
            if (m[i]==7) n[i]=181+d[i];
            if (m[i]==8) n[i]=212+d[i];
            if (m[i]==9) n[i]=243+d[i];
            if (m[i]==10) n[i]=273+d[i];
            if (m[i]==11) n[i]=304+d[i];
            if (m[i]==12) n[i]=334+d[i];
            if (y&&m[i]>2) n[i]++;
        }
        k=1;
        for (i=1;i<l;i++)
            if ((n[i]>=n[0]&&n[i]-n[0]<=p[i])||(n[i]+365+y>=n[0]&&n[i]+365+y-n[0]<=p[i]))
            {
                swap(k,i);
                k++;
            }
        for (i=1;i<k;i++)
            for (j=i;j<k;j++)
                if (Is(i,j)) swap(i,j);
        printf("Today is:%3d%3d
    ",d[0],m[0]);
        for (i=1;i<k;i++)
        {
            printf("%3d%3d ",d[i],m[i]);
            if (n[i]==n[0]) printf("*TODAY*");
            else
            {
                if (n[i]>n[0])
                {
                    for (j=0;j<p[i]+n[0]-n[i]+1;j++) printf("*");
                    for (j=0;j<7-(p[i]+n[0]-n[i]+1);j++) printf(" ");
                }
                else
                {
                    for (j=0;j<p[i]+n[0]-n[i]-365-y+1;j++) printf("*");
                    for (j=0;j<7-(p[i]+n[0]-n[i]-365-y+1);j++) printf(" ");
                }
            }
            printf(" %s
    ",s[i]);
        }
        return 0;
    }
    int main()
    {
        char ch;
        scanf("%d
    ",&y);
        if (y%4==0) y=1;
        else y=0;
        l=1;
        while (scanf("%c",&ch)&& ch!='#')
        {
            if (ch=='A') {scanf("%d%d%d 
    ",&d[l],&m[l],&p[l]);gets(s[l]);q[l]=l;l++;}
            if (ch=='D') {scanf("%d%d
    ",&d[0],&m[0]);f();}
        }
        return 0;
    }
    


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    无法import的原因(ImportError: No module named *****)
    Mac 安装终端软件
    MyEclipse中拷贝J2EE项目,发布到tomcat中名字一样的解决办法
    微PE工具箱 v2.1 正式版,最好用的PE工具箱
    Windows 10 v2004 (OS Build 19041.329)
    Microsoft Visual C++ 2019 14.27.28914.0[2020.06.03]
    Visual C++ 运行库合集包完整版 v20200603
    VMware-workstation-full-15.5.6-16341506官方版及密钥
    [转载]使用PRIMO组件,让你的硬盘快几倍!
    [转载]goldendict下优质词典简介及安装
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4908912.html
Copyright © 2020-2023  润新知