《数据结构编程实验》 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;
}
时间: 03-17

《数据结构编程实验》 2.4.4Calendar个人见解,求指导的相关文章

数据结构编程实验——chapter8-采用树结构的非线性表编程

关于树结构的非线性表编程在数据结构中可以说占据了半壁江山,其中涉及的知识点繁杂,但也是数据结构体现运算优化的核心所在,下面我们将较为初步且系统得讨论数据结构中一系列有关树的表示. 首先我们再次明确树的形式化概念: 树是n个节点的有限集合,这个集合满足以下的条件: 1)     有且仅有一个节点没有前件. 2)     除根外,其他的所有节点都有且仅有一个前件. 3)     除去根以外,其他每个节点都通过唯一的路径连接根上.每个节点的前件称为该节点的父节点,后件称为该节点的子节点. 这篇文章主要

数据结构编程实验

实验一 动态链表的设计与应用 1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序). 2.遍历单向链表. 3.把单向链表中元素逆置(不允许申请新的结点空间). 4.在单向链表中删除所有的偶数元素结点. 5.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表. 6.利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表. 7.利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表. 8.利用算法1建立的链表,实现将其分解成

20172317 《程序设计与数据结构》实验一实验报告

20172317 2017-2018-2 <程序设计与数据结构>实验一报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 蒋子行 学号:20172317 实验教师:王志强 实验日期:2018年3月21日 必修/选修: 必修 1.实验内容 下载IDEA,并且成功的配置了IDEA 完成PP2.5,PP3.3,PP3.5,PP3.8,不过这些不是本来就是第三周作业么 把编程工程导入IDEA中 2.实验过程及结果 过程:首先是到处查找关于本次试验的资料...然后到处下载IDEA.

20172333 2017-2018-2 《程序设计与数据结构》实验四则运算报告

20172333 2017-2018-2 <程序设计与数据结构>实验四则运算报告 1.结对成员 李楠20172330 担任角色(团队分工) [x] 1.前期分析流程 领航员:严域俊 操作员:李楠 原因:我对于整个四则运算过程要求进行一一确定需要编写什么样的类,而李楠则是对于我们要编写的类寻找一些方法来进行实现,以及如何方便快捷的进行编写. [x] 2.中期各自分工编写类 该阶段主要是进行各自任务分工,由于之前的讨论我们的目的较为明确分为三个步奏,第一是我进行编写一个可以随机生成不同等级的题目类

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答

20172313 2017-2018-2 《程序设计与数据结构》实验三报告

20172313 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 余坤澎 学号:20172313 实验教师:王志强 实验日期:2018年5月10日 必修/选修: 必修 1.实验内容 编程标准能够使代码更容易阅读和理解,甚至可以保证其中的错误更少.编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性.安装alibaba 插件,解决代码中

20172305 2017-2018-2 《程序设计与数据结构》实验三报告

20172305 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 谭鑫 学号:20172305 实验教师:王志强 实验日期:2018年5月27日 必修/选修: 必修 1.实验内容 1.代码规范 Eclipse的内容替换成IDEA并安装alibaba 插件,解决代码中的规范问题. 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用

20172311 2017-2018-2 《程序设计与数据结构》实验三报告

20172311 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 赵晓海 学号:20172311 实验教师:王志强 实验日期:2018年5月27日 必修/选修: 必修 1.实验内容 (1)代码规范 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA 参考 http://www.cnblogs.com/rocedu/p/6371315.html

20172333 2017-2018-2 《程序设计与数据结构》实验5报告

20172333 2017-2018-2 <程序设计与数据结构>实验5报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 严域俊 学号:20172333 实验教师:王志强 实验日期:2018年6月13日 必修/选修: 必修 1.实验内容 任务1: 两人一组结对编程: [x] 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA [x] 结对实现中缀表达式转后缀表达式的功能 MyBC.java [x] 结对实现从上面功能