2024 年 4 月 12 日蓝桥刷题

最后一天了,突击一下


计算 2 的幂

题目描述

给定非负整数 nn,求 2n2^n 的值。

输入格式

一个整数 nn0n<310\le n<31

输出格式

一个整数,即 22nn 次方。

请注意,如果您正在使用 cout 进行输出,您需要关注被输出的数据的类型。输出格式不符合预期可能会造成答案错误。

常用函数的返回值类型可以在 cppreference.comcplusplus.com 查询到。例如,您可以在这两个网站中查到 pow 函数的返回值是 floatdouble

您可以使用显式或隐式的类型转换,来变换数据类型。

样例 #1

样例输入 #1

1
3

样例输出 #1

1
8

题解

1
2
n = int(input())
print(2\*\*n)

解释

没啥好说的,简单题自己安慰自己

含 k 个 3 的数

题目描述

输入两个正整数 mmkk,其中 1<m10151 \lt m \leq 10^{15}1<k151 \lt k \leq 15 ,判断 mm 是否恰好含有 kk33,如果满足条件,则输出 YES,否则,输出 NO

输入格式

输入一行,为两个整数 m,km,k,中间用单个空格间隔。

输出格式

满足条件,则输出 YES,否则,输出 NO

样例 #1

样例输入 #1

1
43833 3

样例输出 #1

1
YES

题解

1
2
3
4
5
6
7
8
9
10
m, k = map(int, input().split())
m = str(m)
count = 0
for i in range(len(m)):
if m[i] == "3":
count += 1
if count == k:
print("YES")
else:
print("NO")

解释

先将 mm 转换为字符串,然后遍历字符串,统计 33 的个数,如果个数等于 kk,则输出 YES,否则,输出 NO

[NOIP2011 普及组] 数字反转

题目描述

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

输入格式

一个整数 NN

输出格式

一个整数,表示反转后的新数。

样例 #1

样例输入 #1

1
123

样例输出 #1

1
321

样例 #2

样例输入 #2

1
-380

样例输出 #2

1
-83

提示

【数据范围】

$-1,000,000,000\leq N\leq 1,000,000,000 $。

noip2011 普及组第一题

题解

1
2
3
4
5
6
7
8
n = int(input())
if n < 0:
n = -n
n = int(str(n)[::-1])
n = -n
else:
n = int(str(n)[::-1])
print(n)

解释

先判断 nn 是否为负数,如果是负数,则先取绝对值,再反转,最后再取负值。如果 nn 为正数,则直接反转。

这题有个有意思的点就是,切片操作,直接用切片翻转字符串,然后再转换回整数,可以得到正确的结果。

小鱼的数字游戏

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 aia_i(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以 00 结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

样例 #1

样例输入 #1

1
3 65 23 5 34 1 30 0

样例输出 #1

1
30 1 34 5 23 65 3

提示

数据规模与约定

对于 100%100\% 的数据,保证 0ai23110 \leq a_i \leq 2^{31} - 1,数字个数不超过 100100

题解

1
2
3
4
5
a = list(map(int, input().split()))
for i in range(len(a)):
if a[len(a) - 1 - i] == 0:
continue
print(a[len(a) - 1 - i], end=" ")

解释

先将输入的数字列表 a 倒序,然后遍历列表,如果当前数字不为 00,则输出该数字,否则,跳过该数字。

小玉买文具

题目描述

班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 1199 角,而班主任给小玉的钱是 aabb 角,小玉想知道,她最多能买多少只签字笔呢。

输入格式

输入只有一行两个整数,分别表示 aabb

输出格式

输出一行一个整数,表示小玉最多能买多少只签字笔。

样例 #1

样例输入 #1

1
10 3

样例输出 #1

1
5

提示

数据规模与约定

对于全部的测试点,保证 0a1040 \leq a \leq 10^40b90 \leq b \leq 9

题解

1
2
3
4
expensive_paper = 1.9
a, b = map(int, input().split())
money = a + b * 0.1
print(int(money / expensive_paper))

解释

首先,我们知道一只签字笔的价格是 1199 角,所以我们可以计算出小玉的钱可以买多少只签字笔。

这边需要复习一下小数点后精确的知识点

小玉家的电费

题目描述

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电 [2006]27 号规定,月用电量在 150150 千瓦时及以下部分按每千瓦时 0.44630.4463 元执行,月用电量在 151400151\sim 400 千瓦时的部分按每千瓦时 0.46630.4663 元执行,月用电量在 401401 千瓦时及以上部分按每千瓦时 0.56630.5663 元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入格式

输入一个正整数,表示用电总计(单位以千瓦时计),不超过 1000010000

输出格式

输出一个数,保留到小数点后 11 位(单位以元计,保留到小数点后 11 位)。

样例 #1

样例输入 #1

1
267

样例输出 #1

1
121.5

题解

1
2
3
4
5
6
7
8
9
n = int(input())
money = 0
if n <= 150:
money = n * 0.4463
elif n <= 400 and n > 150:
money = 150 * 0.4463 + (n - 150) * 0.4663
elif n > 400:
money = 150 * 0.4463 + (400 - 150) * 0.4663 + (n - 400) * 0.5663
print("%.1f" % money)

解释

首先,我们先判断用电量是否在 150150 千瓦时及以下部分,如果在,则按每千瓦时 0.44630.4463 元执行,如果不在,则判断用电量是否在 151400151\sim 400 千瓦时的部分,如果在,则按每千瓦时 0.46630.4663 元执行,如果不在,则判断用电量是否在 401401 千瓦时及以上部分,如果在,则按每千瓦时 0.56630.5663 元执行。

然后,我们计算出应交的电费,保留到小数点后 11 位。

小玉在游泳

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 22 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 98%98\%。现在小玉想知道,如果要游到距离 ss 米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式

输入一个实数 ss(单位:米),表示要游的目标距离。

输出格式

输出一个整数,表示小玉一共需要游多少步。

样例 #1

样例输入 #1

1
4.3

样例输出 #1

1
3

提示

数据保证,0s<1000 \leq s < 100,且 ss 小数点后最多只有一位。

题解

1
2
3
4
5
6
7
8
9
s = float(input())
step = 2
all_step = 0
count = 0
while all_step < s:
count += 1
all_step += step
step = step * 0.98
print(count)

解释

首先,我们初始化 step22all_step00count00

然后,我们开始循环,当 all_step 小于等于 s 时,我们进行一次循环,count11all_step 加上 stepstep 乘以 0.980.98

最后,我们输出 count,表示小玉一共需要游多少步。

禽兽的传染病

题目背景

mxj 的启发。

题目描述

禽兽患传染病了。一个禽兽会每轮传染 xx 个禽兽。试问 nn 轮传染后有多少禽兽被传染?

输入格式

两个非负整数 xxnn

输出格式

一个整数,即被传染的禽兽数。

样例 #1

样例输入 #1

1
10 2

样例输出 #1

1
121

提示

保证 x,nx,n 以及答案都在 6464 位无符号整数的表示范围内。

题解

1
print('这个我不会做')

解释

这个题目我不会做,因为我不会。