猜生日(蓝桥杯题库)

这是一道编程题,要求根据已知的2012年3月12日的植树节,以及题目中的条件,遍历年份从2012年前推,寻找一个6月出生的人的出生日期,该日期能被当年、当月、当日整除。通过循环和条件判断,最终计算并输出这个8位数的日期。

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

今年的植树节(2012 年 3 月 12 日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”

“把我出生的年月日连起来拼成一个 8 位数(月、日不足两位前补 0)正好可以被今天的年、月、日整除!”

他想了想,又补充到:“再给个提示,我是 6 月出生的。”

根据这些信息,请你帮小明算一下,他叔叔的出生年月日。

格式是年月日连成的 8 位数。例如,如果是 1948 年 6月 12 日,就写:19480612。

问题分析

已知条件:月份已知,天份可能的取值已知(1-30),年份未知但是必定在2012以前,所以查找时从年份2012向前查找,日期1-30查找每查找一个都能得到一个数字,此数字=年份*10000+月份*100+天数;验证这一个数字能否同时被2012,3,12整除,如果能够此数字就是我们要找的日期。

代码实现

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int year;//记录年份
  int month=6;//月份已知
  int day=1;//天数
  for(year=2012;;year--){//年份从2012年向前查找,找到的第一个必定是日期最近的
    int num=0;//记录年份月份天数构成的数字
    for(;day<=30;day++){//因为6月有30天所以此人出生的日期只能是1-30之间的一个数
      num=year*10000+month*100+day;//构造数字
      if(num%2012==0&&num%3==0&&num%12==0){//验证能否同时被2012,3,12整除
        printf("%d",num);//输出结果
        return 0;//程序结束
      }
    }
    day=1;
  }
  return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值