题目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
知识点
- 三重嵌套循环实现目的
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)
知识点
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=23
7=7
8=222
9=33
10=25
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)}')
知识点
- 在质数内找某一个数的因子,就是利用循环遍历质数,这个数对其求余为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}')
知识点
- 本来想着利用双重循环,一行控制高,一行控制宽度,但是调试时发现
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])
知识点
- 优化后的算法,只用对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)
知识点
无,主要是对问题的解决步骤思考