【蓝桥杯c++与Python每日练习】每日刷题day1:奖券数目,星系炸弹,三羊献瑞。

????????????
????????????Hello,大家好我是上进小菜猪,一个有趣的全栈博主,欢迎关注,多多关照
????????????欢迎大家找我合作学习(文末有VX与公众号 想进学习交流群or学习资料or一起刷题 欢迎++)
????????????苟怀四方志,所在可游盘,一起加油进步!????????????
????????????

一,奖券数目

标签:2015,B组省赛,填空题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

有些人很迷信数字,比如带 “4”“4” 的数字,认为和“死”谐音,就觉得不吉利。 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是 55 位数(10000-9999910000−99999),要求其中不要出现带 “4”“4” 的号码。

主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

运行限制 最大运行时间:1s 最大运行内存: 128M

答案:

 52488

python解法:

cout=0
for a in range(10000,99999+1):
    u=str(a)
    flag=1
    for i in range(5):
        if u[i]=='4':
            flag=0

    if flag==1:
        cout=cout+1
print(cout)

c++解法:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a=10000,c;
    int b[10];
    int coutx=0;
    for(int i=a;i<100000;i++)
    {
        c=i;
        int j=0,m,flag=1;
        while(c>0)
            {
                m=c%10;
                b[j]=m;
                j++;
                c=c/10;
            }
        for(int p=0;p<5;p++)
        {
            if(b[p]==4)
            {
                flag=0;
            }
        }
        if(flag==1)
        {
            coutx++;
        }

    }
    cout<<coutx<<endl;
}

心得:python简单快速

二,星系炸弹

标签:2015,B组省赛,填空题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

在 X 星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹 20152015 年 11 月 1v 日放置,定时为1v日放置,定时为15天,则它在天,则它在2015年年1月月16$ 日爆炸。

有一个贝塔炸弹,20142014 年 1111 月 99 日放置,定时为 10001000 天,请你计算它爆炸的准确日期。

请输出该日期,格式为 yyyy-mm-ddyyyy−mm−dd 即 44 位年份 22 位月份 22 位日期。比如:2015-02-192015−02−19。

运行限制 最大运行时间:1s 最大运行内存: 128M

答案:

2017-08-05

python 普通解法:

pmonth=[31,28,31,30,31,30,31,31,30,31,30,31]
rmonth=[31,29,31,30,31,30,31,31,30,31,30,31]
year=2014
month=11
day=9
for a in range(1000):
    #闰年
    if((year%4==0 and year%100!=0) or (year%400 ==0) ):
        if(day<rmonth[month-1]):
            day=day+1
        elif(day==rmonth[month-1]):
            if(month<12):
                day=1
                month=month+1
            else:
                day=1
                month=1
                year=year+1
    #平年
    else:
        if(day<pmonth[month-1]):
            day=day+1
        elif(day==pmonth[month-1]):
            if(month<12):
                day=1
                month=month+1
            else:
                day=1
                month=1
                year=year+1
print(year,month,day)

Python->datetime库解法:

import datetime
yester = datetime.date(2014,11,9)
time = datetime.timedelta(days=1000)
today = yester + time
print(today)

c++解法:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int pmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int rmonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int year=2014,month=11,day=9;
    for (int i=0;i<1000;i++)
    {
        //闰年
        if((year%4==0&&year%100!=0) ||(year%400==0))
        {
            if(day<rmonth[month-1])
            {
                day++;
            }
            else if(day==rmonth[month-1])
            {
                if(month<12)
                {
                    month++;
                    day=1;
                }
                else if(month==12)
                {
                    day=1;
                    month=1;
                    year++;
                }
            }
        }
        //平年
        else
        {
             if(day<pmonth[month-1])
            {
                day++;
            }
            else if(day==pmonth[month-1])
            {

                if(month<12)
                {
                    day=1;
                    month++;
                }
                else if(month==12)
                {
                    month=1;
                    year++;
                    day=1;
                }
            }
        }
    }
    cout<<year<<"-"<<month<<"-"<<day<<endl;
    //cout<<pmonth[1];


}

三,三羊献瑞

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

观察下面的加法算式:

      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气

copy
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你输出“三羊献瑞”所代表的 44 位数字(答案唯一)。

运行限制 最大运行时间:1s 最大运行内存: 128M

python解法(枚举暴力需要跑一分钟左右):

#a祥 b瑞 c生 d辉 e三 f羊 g献 h气
for a in range(1,10):
    for b in range(0,10):
        for c in range(0,10):
            for d in range(0,10):
                for e in range(1,10):
                    for f in range(0,10):
                        for g in range(0,10):
                            for h in range(0,10):
                                x=a*1000+b*100+c*10+d
                                y=e*1000+f*100+g*10+b
                                z=e*10000+f*1000+c*100+b*10+h
                                if(x+y==z and a!=b and a!=c and a!=d and a!=e and a!=f and a!=g and a!=h and b!=c and b!=d and b!=e and b!=f and b!=g and b!=h and c!=d and c!=e and c!=f and c!=g and c!=h and d!=e and d!=f and d!=g and d!=h and e!=f and e!=g and e!=h and f!=g and f!=h and g!=h):
                                    print(a,b,c,d,e,f,g,h)

python解法(使用itertools.permutations)快速方法:

import itertools
count=0
a=[i for i in range(10)]
x=itertools.permutations(a,8)
for i in x:
    if ((i[0]*1000+i[1]*100+i[2]*10+i[3])+(i[4]*1000+i[5]*100+i[6]*10+i[1])==(i[4]*10000+i[5]*1000+i[2]*100+i[1]*10+i[7])and i[4]!=0):
        print(i[4],i[5],i[6],i[1])

c++暴力枚举法:

#include <string>
using namespace std;
int main() {
    for (int b = 2; b < 9; ++b) {
        for (int d = 2; d < 9; ++d) {
            if (b == d)
                continue;
            for (int g = 2; g < 9; ++g) {
                if (g == b || g == d)
                    continue;
                int c = b + 1;
                if (c == b || c == d || c == g)
                    continue;
                if (c + g <= 10)
                    continue;
                int sum = 9000 + b * 100 + c * 10 + d + 1000 + g * 10 + b;
                for (int i = 2; i < 9; ++i) {
                    if (i == b || i == d || i == g || i == c)
                        continue;
                    if (sum <= (10000 + c * 100 + b * 10 + i) && sum >= (10000 + c * 100 + b * 10 + i)) {
                        printf("%d%d%d%d\n", 1, 0, g, b);

                    }
                }
            }
        }
    }
    return 0;
}

END

????????????关注作者,持续阅读作者的文章,一起学习更多知识!

上一篇:as 覆盖


下一篇:as 静态成员与实例成员: