洛谷(仅用于个人学习)
# 【深基4.例4】一尺之棰
## 题目描述
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 $a$ 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 $2$,向下取整)。第几天的时候木棍的长度会变为 $1$?
## 输入格式
输入一个正整数 $a$,表示木棍长度。
## 输出格式
输出一个正整数,表示要第几天的时候木棍长度会变为 $1$。
a=int(input())
count=1
while a!=1:
a=a//2
count+=1
print(count)
总结:python中没有++自增,而是要写成+=1。然后向下取整是//。
# 小玉在游泳
## 题目描述
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 $2$ 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 $98\%$。现在小玉想知道,如果要游到距离 $s$ 米的地方,她需要游多少步呢。请你编程解决这个问题。
## 输入格式
输入一个实数 $s$(单位:米),表示要游的目标距离。
## 输出格式
输出一个整数,表示小玉一共需要游多少步。
s=float(input())
x=2
count=0
while s>0:
s -= x
x *= 0.98
count += 1
print(count)
总结 :一开始是写成了s=int(input()),但是输入值可以是一位小数,所以要写成float。
# 【深基4.习5】求极差 / 最大跨度值
## 题目描述
给出 $n$ 和 $n$ 个整数 $a_i$,求这 $n$ 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。
## 输入格式
第一行输入一个正整数 $n$,表示整数个数。
第二行输入 $n$ 个整数 $a_1,a_2 \dots a_n$,以空格隔开。
## 输出格式
输出一个整数,表示这 $n$ 个整数的极差。
n=int(input())
L=list(map(int,input().split()))
a=max(L)
b=min(L)
print(a-b)
# 【XR-3】等差数列
## 题目描述
小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和。
等差数列:对于一个 $n$ 项数列 $a$,如果满足对于任意 $i \in [1,n)$,有 $a_{i+1} - a_i = d$,其中 $d$ 为定值,则称这个数列为一个等差数列。
## 输入格式
一行 $3$ 个整数 $a_1, a_2, n$,表示等差数列的第 $1,2$ 项以及项数。
**数据范围:**
- $|a_1|,|a_2| \le 10^6$。
- $3 \le n \le 10^6$。## 输出格式
一行一个整数,表示答案。
一开始写了一个利用等差公式求和的代码
a1,a2,n=map(int,input().split())
d=a2-a1
s=a1*n+(n*(n-1)*d)/2
print(s)
然后提交运行,出现错误,以为是因为s得到的值是小数的原因,然后就将s转换为int,还是不行。(就是 s=int(a1*n+(n*(n-1)*d)/2)
看到题解中是用了列表,然后直接sum()求和。所以我也就想试一下。
a1,a2,n=map(int,input().split())
list=[a1,a2]
d=a2-a1
for i in range(2,n):
list.append(list[i-1]+d)
print(sum(list))
其实我感觉我这样写没什么问题了,在IDLE上自己运行是没问题的,但是提交答案在洛谷上面就显示编译错误,不是很懂为什么。
然后在想可能是不是因为用了list这个名称,就换了种下面这样的方式,但是还是不行。
l=list(map(int,input().split()))
L=[l[0],l[1]]
d=l[1]-l[0]
for i in range(2,l[2]):
L.append(L[i-1]+d)
print(sum(L))
放弃了。。。。。
# [CSP-J2019] 数字游戏
## 题目描述
小 K 同学向小 P 同学发送了一个长度为 $8$ 的 **01 字符串**来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 $1$。
注意:01 字符串为每一个字符是 $0$ 或者 $1$ 的字符串,如 `101` 为一个长度为 $3$ 的 01 字符串。
## 输入格式
输入文件只有一行,一个长度为 $8$ 的 01 字符串 $s$。
## 输出格式
输出文件只有一行,包含一个整数,即 01 字符串中**字符 $\mathbf 1$** 的个数。
s=input()
count=0
for i in range(0,8):
if s[i:i+1]=='1':
count += 1
else:
continue
print(count)
总结:一开始在判断语句那里忘了加引号,就是它是字符串,所以应该是'1',而不是单纯一个1。
# [NOIP2011 普及组] 数字反转
## 题目描述
给定一个整数 $N$,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
## 输入格式
一个整数 $N$。
## 输出格式
一个整数,表示反转后的新数。
N=input()
flag=0
if N[0]=='-':
N1=N[1:]
N1=N1[::-1]
flag=1
else:
N1=N[::-1]
x=0
for i in range(0,len(N1)):
if N1[i]=='0':
x += 1
continue
else:
break
N2=N1[x:]
if flag==1:
print(-int(N2))
else:
print(int(N2))
总结:纳闷,写了好久,一开始只是可以转换正整数,负的数无法翻转,然后后面注意到了负数前面有个负号,但是!!!!为什么我这个运行提交后,11个测试点AC了,但是有一个测试点RE,不知道为什么超时。。。。
# 【深基4.例6】数字直角三角形
## 题目描述
给出 $n$,请输出一个直角边长度是 $n$ 的数字直角三角形。所有数字都是 $2$ 位组成的,如果没有 $2$ 位则加上前导 $0$。
## 输入格式
输入一个正整数 $n$。
## 输出格式
输出如题目要求的数字直角三角形。
n=int(input())
x=0
for i in range(0,n):
for j in range(i,n):
x += 1
if x<10:
print('0',end='')
print(x,end='')
print()
感觉代码没问题,在IDLE上运行也没问题,但是在洛谷上面提交就说编译错误。
知识点:在Python中,如果想在输出时不换行,可以使用end参数。默认情况下,print函数会在每次调用后自动换行,但可以通过将end参数设置为空字符串('')来禁用此行为。
# 阶乘之和
## 题目描述
计算 S=1!+2!+3!+⋯+n!(n≤20)
其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1
例如,5!=5×4×3×2×1=120。
## 输入格式
一个正整数 n
## 输出格式
一个正整数 S,表示计算结果。
n=int(input())
l=[]
for i in range(1,n+1):
a=1
for j in range(1,i+1):
a *= j
l.append(a)
print(sum(l))
这是一开始自己写的,感觉没问题,运行下来得到的结果也都是正确的。但是提交的时候就是编译错误。。。
def f(n):
if n==0 or n==1:
return 1
else:
return n*f(n-1)
n=int(input())
s=0
for i in range(1,n+1):
s += f(i)
print(s)
这是后面查了一下写的,就AC了。就是用了一个函数来定义阶乘,但是我感觉明明就是可以用两个循环来实现,也是不知道为什么会编译错误。不过也是学到了一种方法吧,就是可以先定义函数。
# [NOIP2013 普及组] 计数问题
## 题目背景
NOIP2013 普及组 T1
## 题目描述
试计算在区间 $1$ 到 $n$ 的所有整数中,数字 $x$($0\le x\le9$)共出现了多少次?例如,在 $1$ 到 $11$ 中,即在 $1,2,3,4,5,6,7,8,9,10,11$ 中,数字 $1$ 出现了 $4$ 次。
## 输入格式
$2$ 个整数 $n,x$,之间用一个空格隔开。
## 输出格式
$1$ 个整数,表示 $x$ 出现的次数。
又是一道不是很会的题目
a=input().split()
n=int(a[0])
x=a[1]
count=0
s=[]
for i in range(1,n+1):
s.append(i)
r=''.join([str(i) for i in s])
for j in r:
if j=='x':
count += 1
continue
print(count)
自己写的代码,不能得到正确的结果,问题应该就是出在转换字符串和转换整数这两个之间。
查了之后,写了一个可以得到结果的:
def count(n,x):
s=''.join(str(i) for i in range(1,n+1))
count=0
for i in s:
if int(i)==x:
count+=1
return count
a=input().split()
n=int(a[0])
x=int(a[1])
print(count(n,x))
知识点:
在Python中,将列表转换为字符串的方法有很多种,下面是一些常见的方法:
使用 join()
方法
join()
是字符串的一个方法,可以将一个可迭代的对象(如列表)中的元素连接为一个字符串。
my_list = ['a', 'b', 'c', 'd']
my_string = ''.join(my_list)
print(my_string) # 输出:'abcd'
仅用于自己备赛学习,手下留情。