【蓝桥杯备赛】Day11:循环结构(下)

题目1:题目 1141: 百钱百鸡问题

中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

输入格式

无输入

输出格式

给出所有的解,每组解占一行
解的顺序:按“字典序”排列,即公鸡数少的在前;公鸡数相同,母鸡数少的在前
格式:
cock=%d,hen=%d,chicken=%d\n

样例输入

样例输出

cock=0,hen=25,chicken=75
cock=4,hen=18,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84

python代码

for i in range(20):
    for j in range (33):
        for k in range (100):
            if 5*i+3*j+k/3==100 and i+j+k==100:
                print(f'cock={i},hen={j},chicken={k}')
一行代码:
[print(f'cock={i},hen={j},chicken={k}') for i in range(20) for j in range (33)
 for k in range (100) if 5*i+3*j+k/3==100 and i+j+k==100]#list comprehension

知识点

  1. 三重嵌套循环实现目的
  2. list comprehension:在列表内生成参数,可嵌套使用for,甚至加上if

题目2:题目 1022: [编程入门]筛选N以内的素数

用简单素数筛选法求N以内的素数。

输入格式

N

输出格式

2~N的素数

样例输入

100

样例输出

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

python代码

n=int(input())
for i in range(2,n+1):
    for j in range(2,i): #i-1是因为i%j==0时不是素数,所以要排除1和本身
        if i%j==0:
            break          #break是指跳出内循环,在外循环中判断下一个数
    else:                   #break不发生,else后的语句执行一次
        print(i)

知识点

  1. for语句块还可以附加一个else,本结构也是python的独特之处,需重点记忆

题目3:题目 1464: 蓝桥杯基础练习VIP-分解质因数

求出区间[a,b]中所有整数的质因数分解。
提示

先筛出所有素数,然后再分解。
数据规模和约定

输入格式

输入两个整数a,b。

2< =a< =b< =10000

输出格式

每行输出一个数的分解,形如k=a1a2a3…(a1< =a2< =a3…,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出

3=3
4=22
5=5
6=2
3
7=7
8=222
9=33
10=2
5

python代码

a,b=map(int,input().split())
c=[]
for i in range(2,b+1):#先找到范围内的质数
    for j in range(2,i):
        if i %j==0:
            break
    else:
        c.append(i)

for k in range(a,b+1):
    num=k
    nums=[]#找因子初始操作
    for i in c:
        while num%i==0:
            nums.append(str(i))
            num=num//i
    print(f'{k}={"*".join(nums)}')

知识点

  1. 在质数内找某一个数的因子,就是利用循环遍历质数,这个数对其求余为0的就是因子,放进列表中,用join()连接起来 列表中的元素(必须str类型)

题目4:题目 2831: 画矩形

根据参数,画出矩形。

输入格式

输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。

输出格式

输出画出的图形。

样例输入

7 7 @ 0

样例输出

@@@@@@@
@     @
@     @
@     @
@     @
@     @
@@@@@@@

python代码

h,w,c,flag=map(str,input().split())
h=int(h)
w=int(w)
flag=int(flag)
if flag==1:
    for i in range(h):
        print(f'{c*w}')
else:
    print(f'{c*w}')
    for i in range(1,h-1):
        print(f'{c}{" "*(w-2)}{c}')
    print(f'{c*w}')

知识点

  1. 本来想着利用双重循环,一行控制高,一行控制宽度,但是调试时发现print()不易控制

题目5:题目 2832: 第n个质数

输入一个正整数n,求第n个质数

输入格式

一个不超过10000的正整数n。

输出格式

第n个的质数。

样例输入

10

样例输出

29

python代码

from math import sqrt
import math
n=int(input())
c=[2]
num=1
while num<=n:
    for i in range(2,100000):
        for j in range(2,math.ceil((sqrt(i)+1))):
            if i%j==0:
                break
        else:
            c.append(i)
            num+=1
print(c[n-1])

知识点

  1. 优化后的算法,只用对2到n的平方根之间的整数求余

题目6:题目 2833: 金币

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。

你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。

输入格式

一个整数(范围1到10000),表示天数。

输出格式

骑士获得的金币数

样例输入

6

样例输出

14

python代码

n=int(input())
sum=0#金币总和
day=0#某一块
coin=0#块内每天金币
q=0#一共发了多少天
while q <n:
    day+=1
    coin+=1
    for i in range(day):
        if q==n:
            break
        sum+=coin
        q+=1
print(sum)

知识点

无,主要是对问题的解决步骤思考

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值