今日份感想:继续做题!!!(题源都来自洛谷
目录
P1116 车厢重组
P1146 硬币翻转
P1150 Peter 的烟
P1151 子数整数
P1116 车厢重组
错误代码:
count = 0
N = int(input())
nums = input().split()
for i in range(N):
nums[i] = int(nums[i])
for i in range(N):
for j in range(i,N):
if nums[j]
很华丽的超时了=.=应该是没有控制输入的字段,猜测案例有分多次输入数据导致如果我没写控制字段就会爆掉 ;所以我的想法是再开一个列表:
count = 0
N = int(input())
nums = list()
final_nums = list()
while len(final_nums)
这遍是全AC。很经典的排序?这题坑的地方就在于,案例中给的数据是一次输入全给你,但我在打表过程中发现超时的部分都是因为分成多次给完数据。这就导致了我原本的代码是只输入一次数据,再输入就爆掉了(对Python而言,C/C++只要一个简单的for就可以解决)。开两个list就是为了一个储存输入的数据,另一个将每一次输入的数据打入到上一个表中;因为我所有的循环都限制到N,所以不要在意会多打入数据。还有一个简便的点就是这题没要求排序,只是问你要“旋转”几次,那只要比大小就好了,在这个数之后小的数据都是要交换的,其实就是模拟冒泡排序的过程。
P1146 硬币翻转
分析一下,就是第 i 次翻转的时候除了第 i 枚硬币都要翻转,也可以理解为每次翻转一枚,所以至少也就翻转四次
AC代码:
n = int(input())
print(f"{n}")
nums = list()
for i in range(n):
nums.append("0")
nums[i] = int(nums[i]) #令初始排序为“0000”
for i in range(n):
for j in range(n):
if i == j: #如果刚好是第i次的第i枚,则不变
continue
else: #令硬币翻转
if nums[j] == 0:
nums[j] = 1
else:
nums[j] = 0
for j in range(n):
print(f"{nums[j]}",end='')
print(end='n')
P1150 Peter 的烟
一个很基础的奥数题,通过烟蒂换烟再新产生新的烟蒂 ,挺绕口的实际写起来其实很简单
AC代码:
a = input().split()
n = int(a[0])
k = int(a[1])
count = n
while n>=k:
q = n%k #获得了q个烟蒂
n /= k #可获得n个烟
count += int(n)
n += int(q) #一定要转换为int型!
print(f"{int(count)}")
要小心的是,循环里的n和q一定要转变为 int 型,如果n为 float,就有可能出现多次的小数累加起来又可以产生新的烟蒂,这样就会出现误差
P1151 子数整数
看到的第一反应就是暴力破解,结果试了一下还真可以,也懒得优化了就这样吧hhh
AC代码:
k = int(input())
count = 0
for i in range(10000,30001):
sub1 = int(i/100)
s = i/10
sub2 = int(s%1000)
sub3 = int(i%1000)
if sub1%k == 0 and sub2%k == 0 and sub3%k == 0:
print(f"{i}")
count=1
if count != 1:
print("No")



