蓝桥杯-第六届蓝桥杯C语言A组/B组/C组-Python题解

目录

方程整数解

星系炸弹

奇妙的数字

牌型种数

手链样式

饮料换购

奖券数目

三羊献瑞

加法变乘法

隔行变色

立方尾不变


方程整数解

方程: a^2 + b^2 + c^2 = 1000

这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。

你能算出另一组合适的解吗?

请填写该解中最小的数字。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

flag=False
for i in range(1,101):
    for j in range(1,101):
        for k in range(1,101):
            if i*i+j*j+k*k==1000 and i!=6 and j!=8 and k!=30:
                print(i,j,k)
                flag=True
                break
        if flag:
            break
    if flag:
        break

星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

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

有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19

请严格按照格式书写。不能出现其它文字或符号。

#月份日期表
month_days=[[0,31,28,31,30,31,30,31,31,30,31,30,31],[0,31,29,31,30,31,30,31,31,30,31,30,31]]
#判断闰年
def isLeap(year):
    if year%4==0 and year%100!=0 or year%400==0:
        return True
    else:
        return False
year=2014
month=11
day=9
#模拟爆炸过程
i=1
while i<=1000:
    day+=1
    #超过当月最大天数
    if day>month_days[1 if isLeap(year) else 0][month]:
        day=1
        month+=1
        if month>12:
            month=1
            year+=1
    i+=1
print('{}-{:0>2d}-{:0>2d}'.format(year,month,day))

 

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。

你能猜出这个数字是多少吗?

请填写该数字,不要填写任何多余的内容。

#判断平方数字和立方数字是否正好用了从0-9
def juage(x,y):
    flag=True
    number_list=[]
    x=str(x)
    y=str(y)
    for i in x:
        number_list.append(i)
    for i in y:
        number_list.append(i)
    number_list.sort()
    for i in range(10):
        if int(number_list[i])!=i:
            flag=False
            break
    return flag
for i in range(1,10*10):
    if juage(i*i,i*i*i):
        print(i)
        break

牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。

一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。

这时,小明脑子里突然冒出一个问题:

如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

#组合数学
sum=1
number=52
#模拟发牌
for i in range(1,14):
    sum*=number
    number-=1
print(sum)

 

手链样式

小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。

他想用它们串成一圈作为手链,送给女朋友。

现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?

请你提交该整数。不要填写任何多余的内容或说明性的文字。

组合数学,圆周排列,+去重

饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0<n<10000)

输出:一个整数,表示实际得到的饮料数

例如:

用户输入:

100

程序应该输出:

149

用户输入:

101

程序应该输出:

151

n=int(input())
sum=n
while n>0:
    #如果饮料足够换购
    if n>=3:
        n-=3
        n+=1
        sum+=1
    else:
        break
print(sum)

 

奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。

虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

def juage(n):
    n=str(n)
    flag=False
    if '4' in n:
        flag=True
        return flag
    return flag
ans=0
for i in range(10000,100000):
    if not juage(i):
        ans+=1
print(ans)

 

三羊献瑞

观察下面的加法算式:

祥 瑞 生 辉

+ 三 羊 献 瑞

-------------------

三 羊 生 瑞 气

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

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

#   a0 a1 a2 a3
#+  a4 a5 a6 a7
#-------------
#a4 a5 a2 a1 a8
#全排列0-9找到合适解
number_list=[]
for i in range(10):
    number_list.append(i)
from itertools import permutations
for item in permutations(number_list):
    if item[0]==0 or item[4]==0:
        continue
    x=item[0]*1000+item[1]*100+item[2]*10+item[3]
    y=item[4]*1000+item[5]*100+item[6]*10+item[7]
    z=item[4]*10000+item[5]*1000+item[2]*100+item[1]*10+item[8]
    if x+y==z:
        print(y)
        break

 

加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225

现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:

1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015

就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

#前后两式子相减,消去同类项
diff_number=2015-1225
flag=False
for i in range(1,47):
    for j in range(1,48):
        if i*(i+1)+j*(j+1)-(i+i+1)-(j+j+1)==diff_number:
            if i!=10:
                print(i)
                flag=True
                break
    if flag:
        break

 

隔行变色

Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。

小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....

现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。

请你直接提交这个整数,千万不要填写任何多余的内容。

ans=0
for i in range(21,51):
    if i%2!=0:
        ans+=1
print(ans)

 

立方尾不变

有些数字的立方的末尾正好是该数字本身。

比如:1,4,5,6,9,24,25,....

请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

请提交该整数,不要填写任何多余的内容。

def juage(n):
    square_number=n*n*n
    square_number=str(square_number)
    n=str(n)
    length=len(n)
    flag=False
    if square_number[len(square_number)-length:]==n:
        flag=True
        return flag
    return flag
ans=0
for i in range(1,10001):
    if juage(i):
        ans+=1
print(ans)

猜你喜欢

转载自blog.csdn.net/Talantfuck/article/details/124567133