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

题目1:编写题解 3016: 第几项

对于正整数n,m,求s=1+2+3……+n,当加到第几项时,s的值会超过m?

输入格式

输入m

输出格式

输出n

样例输入

1000

样例输出

45

python代码

m=int(input())
s=0#加和
for n in range(1,m+2):#避免m=1特殊情况,或取一个很大的数
    s+=n
    if s>m:
        print(n)
        break

知识点

题目2:题目 1011: [编程入门]最大公约数与最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。

输入格式

两个整数

输出格式

最大公约数,最小公倍数

样例输入

5 7

样例输出

1 35

python代码

import math
m,n=map(int,input().split())
gys=math.gcd(m,n)#最大公约数
lcm=m*n/gys#注意结果为float
print(gys,int(lcm))


最大公约数(不利用math库):
b=[]
m,n=map(int,input().split())
for i in range(1,min(m,n)+1):
	if m%i==0 and n%i==0:
		b.append(i)
gys=max(b)

知识点

  1. math.gcd(m,n):返回m和n的最大公约数
  2. 最小公倍数:m*n/最大公约数(结果为float)

题目3:题目 2812: 球弹跳高度的计算

一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。
编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?

输入格式

输入一个整数h,表示球的初始高度。

输出格式

输出包含两行:
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。

样例输入

20

样例输出

59.9219
0.0195312

python代码

h=int(input())
ft=h#反弹高度
distance=-h#小球共经过多少米,初始值为-h
for i in range(1,11):
    distance+=(ft*2)
    ft=ft/2
    
print('%g\n%g'%(distance,ft))

知识点

  1. 数形结合,得到初始值distance=-h
  2. 先是距离的累加,之后才是反弹效果的产生

题目4:题目 1147: C语言训练-角谷猜想

角谷猜想:
日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。

输入格式

任一正整数

输出格式

演算的过程

样例输入

10

样例输出

10/2=5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1

python代码

n=int(input())
while n>1:#反正最后n==1,所以可以跳出循环
    if n%2==0:
        print(f'{int(n)}/2={int(n/2)}')
        n/=2
    else:
        print(f'{int(n)}*3+1={int(n*3+1)}')
        n=(n*3+1)

知识点

  1. f-string表达式的运用,{}内部进行计算
  2. n/2float类型数据

题目5:题目 2817: 级数求和

已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。

输入格式

一个整数K。

输出格式

一个整数n。

样例输入

1

样例输出

2

python代码

n=int(input())
sn=0
i=1
while sn<=n:
    sn+=(1/i)
    i+=1
print(i-1)

知识点

  1. sn>n成立时,i+=1已经执行过了,而我们想找的是之前的那个i ,即最小的满足条件的i

题目6:题目 2819: 数字反转

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零

输入格式

输入共 1 行,一个整数N。
-1,000,000,000 ≤ N≤ 1,000,000,000。

输出格式

输出共 1 行,一个整数,表示反转后的新数。

样例输入

123

样例输出

321

python代码

代码1:
n=input()
fn=str(abs(int(n)))#取整+绝对值+字符串,避免‘-’的影响
r=0#反转新数
for j in range(len(fn)-1,-1,-1):
    r+=int(fn[j])*pow(10,j)
if int(n)<0:
    print(-r)
else:
    print(r)
代码2:
n=input()
r=n[::-1]#逆序
if int(n)<0:
    r=int(r.strip('-'))#int作用:将r转换成整型,同时去除可能存在的最高位0
    print(r)
else:
    print(int(r))

知识点

  1. abs():只能针对浮点型和整型 进行操作,不能对 字符串型 操作
  2. r.strip():并不会对r进行修改

题目7:题目 2820: 含k个3的数

输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。
例如,输入:
43833 3
满足条件,输出YES。
如果输入:
39331 3
尽管有3个3,但不能被19整除,也不满足条件,应输出NO。

输入格式

m 和 k 的值,中间用单个空格间隔。

输出格式

满足条件时输出 YES,不满足时输出 NO。

样例输入

43833 3

样例输出

YES

python代码

m,k=map(str,input().split())
if (int(m)%19==0) and (m.count('3')==int(k)):
    print('YES')
else:
    print('NO')

知识点

1.liststr都有count功能,但是str.count(sub,start,end):sub必须是字符串类型,可以在某一范围[start,end-1]内搜索,list.count(i):只能返回i出现的次数,不能在某一范围搜索

  • 32
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值