《C语言及程序设计》实践参考——回文日

返回:贺老师课程教学链接  项目要求

【项目6-回文日】
很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。
[参考解答]

    当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是月,02部分是日。显然,由2015就不能得出一个回文日。
    再如,当年份取2090年时,20900902,由2090可以构造出一个回文日来。
    用年份循环并判断,而不是罗列所有的日期,显然效率上更好。

#include <stdio.h>
int main()
{
    int year,month,day,y,ymd;
    int is_cycle;   //用于标识判断结果:为0时不构成回文日,不为0时,构成回文日
    int count=0;
    for(year = 2015; year < 2100; year++)
    {
                        y = year;  //思考:后面直接用year不行吗?
        month=y%100; //原年份的后两位对应月
         month=(month%10)*10+month/10;//还得把月倒过来,例year=2015时,month由15换为51
        day=y/100; //原年份的前两位对应日
        day=(day%10)*10+day/10;//对日做同样的处理
        is_cycle = 0;
        switch(month) //12个月份,各自对应合法的日期范围
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            if(day<=31)
                is_cycle =1;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            if(day<=30)
                is_cycle=1;
            break;
        case 2:
            if((year%4==0&&year%100!=0)||year%400==0) //闰年
            {
                if(day<=29)
                    is_cycle = 1;
            }
            else
            {
                if(day<=28)
                    is_cycle =1;
            }
            break;
        default:
            continue; //后两位倒过来根本构不成月份
        }
        if(is_cycle) //能构成回文日
        {
            y=year;
            ymd=year;   //构造出年月日的形式供输出
            while(y>0)
            {
                ymd=ymd*10+y%10;
                y=y/10;
            }
            printf("%d\n", ymd);
            count++;
        }
    }
    printf("共有 %d 个回文日。\n", count);
    printf("\n");
    return 0;
}
时间: 2024-09-28 02:38:22

《C语言及程序设计》实践参考——回文日的相关文章

《C语言及程序设计》实践参考——回文数

返回:贺老师课程教学链接  项目要求 [项目4-回文数](1)输入一个正整数,判断其是否为一个回文数(例1221.12321都是回文数,正着看.倒着看,是同一个数).[参考解答] #include <stdio.h> int main() { int n,m,k; scanf("%d", &n); k=n; m=0; //m将为n的反序数 while(k>0) { m=m*10+k%10; k=k/10; } if(m==n) //n等于其反序数,则为回文数

c 回文字符串-用c语言判断输入字符串是不是回文字符串

问题描述 用c语言判断输入字符串是不是回文字符串 输入的字符串可能有空格,要求输入 一个数,表示要输入几组数据,然后输入字符串: 若是回文字符串,则输出yes,否则输出no: 例如 3 qwe abba ds ds no yes no 求代码.. 初学C这问题想了很久,求帮忙.. 解决方案 你可以用两个指针,分别指向字符串的头和尾,依此移动来比较,如果相同则yes,否则no

第12周 上机报告 1之练习3 回文日

题目:很诱人的一个题目:2011年11月02日是一个回文日:2011 1102,我们刚刚度过!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的--).注意:一年只有12个月. 2012年11月30日新发的程序: #include <iostream> using namespace std; int main( ) { int year,month,day,y,anothery; bool is_cycle; int count=0; for(year = 2012; y

C++第11周项目3(10)——回文日

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目3- 有趣的数字]先阅读例题,体会处理数字的一般方法,然后自行选题进行解决,掌握这种类型程序设计的一般方法. 任务:解决下面的问题(选做一道即算完成任务) (10)很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的--).注意:

2014秋C++第11周项目6参考-回文、素数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目6-回文.素数](1)编制一个函数reverse,返回给定数据的"反序数",例如输入1234,输出4321.请编制reverse函数,在下面代码的基础上补充相关的部分,实现要求的功能. int main() { int m,n; cin>>m; n=re

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

《C++语言基础》实践参考——图书馆的书

返回:贺老师课程教学链接 [项目4 - 图书馆的书] 编写一个Book类,包含name(书名).writer(著者).public_name(出版社).price(价格).number(数量).NO(书号)等数据成员.定义成员函数setBook,用来为书籍的数据成员赋值,定义成员函数borrow和restore,分别办理借出和还回(借.还书时,暂时只完成数量的增1减1,这里的书仍是一种书的概念,随着课程进展,我们继续做真正的图书管理系统,每本书都能追踪到是谁何时借了,何时还了)业务,定义成员函数

《C++语言基础》实践参考——旱冰场造价

返回:贺老师课程教学链接 [项目1 - 旱冰场造价] 有一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价. 一级提示: 先定义类,确定其数据成员和成员函数.在这里要定义的旱冰场类,实际我们只关心其面积和周长,根据面积计算场地内抹水泥的造价,根据周长计算围栏的造价.有了类的定义,在main函数中定义该类对象,调用成员函数即可以完成求解.二级提示: 实际上,对于旱冰场,我们只关心它就是一个圆.这就是设计中抓住了本质.于是,设计一个

《C++语言基础》实践参考——指向学生类的指针

返回:贺老师课程教学链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出第1.3.5个学生的信息: 设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中