《实验数据的结构化程序设计》 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\n",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\n",s[i]);
    }
    return 0;
}
int main()
{
    char ch;
    scanf("%d\n",&y);
    if (y%4==0) y=1;
    else y=0;
    l=1;
    while (scanf("%c",&ch)&& ch!='#')
    {
        if (ch=='A') {scanf("%d%d%d \n",&d[l],&m[l],&p[l]);gets(s[l]);q[l]=l;l++;}
        if (ch=='D') {scanf("%d%d\n",&d[0],&m[0]);f();}
    }
    return 0;
}


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







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4908912.html,如需转载请自行联系原作者


相关文章
|
6月前
|
存储 安全 数据管理
PMBOK泛读(第十章) - 项目沟通管理
PMBOK泛读(第十章) - 项目沟通管理
55 0
|
1月前
|
机器学习/深度学习 数据采集 监控
数据分析师的主要工作内容涉及哪些方面?
【4月更文挑战第4天】数据分析师的主要工作内容涉及哪些方面?
21 8
|
2月前
|
设计模式 uml
【软件设计师备考 专题 】标准制订过程和各类标准的基本知识
【软件设计师备考 专题 】标准制订过程和各类标准的基本知识
44 0
|
2月前
|
缓存 算法 测试技术
【软件设计师备考 专题 】如何定义软件需求:系统化的目标、配置、功能、性能和约束
【软件设计师备考 专题 】如何定义软件需求:系统化的目标、配置、功能、性能和约束
203 0
|
6月前
|
数据挖掘 项目管理 数据库
PMBOK泛读(第六章) - 项目进度管理(一)
PMBOK泛读(第六章) - 项目进度管理
48 0
|
6月前
|
监控 算法 数据挖掘
PMBOK泛读(第六章) - 项目进度管理(二)
PMBOK泛读(第六章) - 项目进度管理(二)
38 0
|
项目管理
艾伟也谈项目管理,软件开发前期设计时的注意事项
  说起软件设计,我们可能每个人都做过,但是什么样的方案才是好的设计方案?如何才能设计出一个好的设计方案?在设计过程中需要注意哪些呢?不要总是说:低耦合、可维护性、可扩展性、简易性、可重用性等,本文试图另一个角度出发,带着前面的这些问题,使大家能明白那些问题的答案,并与大家一起探讨。
1003 0
|
前端开发 测试技术