栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

猜生日蓝桥杯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

猜生日蓝桥杯

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

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

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

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

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

答案:19550604

解法:可以采用单个数字,每一个数字为独立个体(最麻烦,一看就懂)

#include

using namespace std;
 
void judge(int a,int b,int c,int d,int e,int f,int g,int h)
{
    if((e*10+f)<=12&&(g*10+h)<=31&&(a*1000+b*100+c*10+d)<2012&&(a*1000+b*100+c*10+d)>1900)
    {
        long long sum=a*10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h;
        if(sum%2012==0&&sum%3==0&&sum%12==0)
        cout<     }
}
 
 
int main()
{
    int year,day;
    for(int a=1;a<=2;a++)
    {
        for(int b=0;b<=9;b++)
        {
            for(int c=0;c<=9;c++)
            {
                for(int d=0;d<=9;d++)
                {
                    for(int e=0;e<=0;e++)
                    {
                        for(int f=6;f<=6;f++)
                        {
                            for(int g=0;g<=3;g++)
                            {
                                for(int h=0;h<=9;h++)
                                {
                                    judge(a,b,c,d,e,f,g,h);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

稍微优化一点点:(分别定义年月日)

#include
#include

int main()
{
    int year,month,day;
    long int sum;
    for(year=1900;year<=2012;year++)
    {
        for(month=6;month<=6;month++)
        {
            for(day=1;day<=31;day++)
            {
                sum=year*10000+month*100+day;
                if(sum%2012==0&&sum%3==0&&sum%12==0)
                    printf("%d",sum);
            }
        }
    }
    return 0;
}
 

直接将年月日定义为一个数:

#include
#include

int main()
{
    long int sum;
    for(sum=19000001;sum<=20120312;sum++)
    {
        if((sum%100)<=31&&(sum/100)%100==6&&sum%2012==0&&sum%3==0&&sum%12==0)
            printf("%d",sum);
    }
    return 0;
}
还有很多更有的方法,欢迎大家留言讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号