zl程序教程

您现在的位置是:首页 >  后端

当前栏目

用Python做入门OJ题

2023-09-11 14:22:53 时间

很多时候,我们用自己常用的语言,可以实现很多很复杂的功能,但是如果用的是一门新学习的语言,那么能力往往就会大打折扣,这就需要我们多练习一些,从头学习。
这里的OJ题,以dot的为主,毕竟目前还是得先把握基础(感觉自己又回到了大一刚开始学习的时候),这里没有什么逻辑要想的,主要就是熟悉语言和一些小的函数。

# 突然,你收到从指挥部发来的信息,敌军的轰炸机正朝着你所在的独木桥飞来!为了安全,你的部队必须撤下独木桥。独木桥的长度为 LL,士兵们只能呆在坐标为整数的地方。所有士兵的速度都为 11,但一个士兵某一时刻来到了坐标为 00 或 L+1L+1 的位置,他就离开了独木桥。

# 每个士兵都有一个初始面对的方向,他们会以匀速朝着这个方向行走,中途不会自己改变方向。但是,如果两个士兵面对面相遇,他们无法彼此通过对方,于是就分别转身,继续行走。转身不需要任何的时间。

# 由于先前的愤怒,你已不能控制你的士兵。甚至,你连每个士兵初始面对的方向都不知道。因此,你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。
class Solution:
	def __init__(self):
		self.length=int(input())
		self.enemy=int(input())
		if self.enemy!=0:
			where=input()
			self.nums=[int(n) for n in where.split()]

	def min_time(self):
		max=0
		if self.enemy==0:
			return 0
		for num in self.nums:
			time=(self.length-num+1) if (self.length-num+1)<num else (num)
			if time>max:
				max=time
		return max

	def max_time(self):
		max=0
		if self.enemy==0:
			return 0
		for num in self.nums:
			time=(self.length-num+1) if (self.length-num+1)>num else (num)
			if time>max:
				max=time
		return max

a=Solution()
print(f"{a.min_time()} {a.max_time()}")


# 华氏度和摄氏度
a=float(input())
b=5*(a-32)/9
c="%.2f"%b
print("c="+c)


#三个数中的较小值
a,b,c=map(int,input().split())
if a>b:
    max=a
else:
    max=b
if max>c:
    pass
else:
    max=c
print(max)

#分段函数计算
a=int(input())
if a<1:
	b=a
elif a>=1 and a<10:
	b=2*a-1
else:
	b=3*x-11
print(b)

# 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。
mark=int(input())
if mark>=90:
	print("A")
elif mark<=89 and mark>=80:
	print("B")
elif mark<=79 and mark>=70:
	print("C")
elif mark<=69 and mark>=60:
	print("D")
else:
	print("E")


# 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
a=input()
b=''
print(len(a))
for i in a:
	b=f"{b} {i}"
print(b.lstrip())
print(a[::-1])

# 企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
# 利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
# 200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
# 400000<I≤600000元时,高于400000元的部分按3%提成;
# 600000<I≤1000000时,高于600000元的部分按1.5%提成;
# I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

l=int(input())
if l<=100000:
	money=0.1*l
elif l<=200000:
	money=10000+0.075*(l-100000)
elif l<=400000:
	money=10000+7500+0.05*(l-200000)
elif l<=600000:
	money=10000+7500+10000+0.03*(l-400000)
elif l<=1000000:
	money=10000+7500+10000+6000+0.015*(l-600000)
else:
	money=10000+7500+10000+6000+6000+0.01*(l-1000000)
print(int(money))


# 输入两个正整数m和n,求其最大公约数和最小公倍数。
m,n=map(int,input().split())
a=m
b=n
while m!=n:
	if m>n:
		m=m-n
	if m<n:
		n=n-m
	if m==n:
		break
print(m)
print(int(a/m*b))

# 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
a=input()
b=0 
c=0 
d=0 
e=0
for n in a:
  # 判断是否是字母
	if n.isalpha():
		b+=1
  # 判断是否是数字
	elif n.isdigit():
		c+=1
	elif n==' ':
		d+=1
	else:
		e+=1
print(f"{b} {c} {d} {e}")

# 求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
a=int(input())
sum=0
i=0
while True:
	sum+=a*2*(10**i)
	a-=1
	i+=1
	if a==0:
		break
print(sum)

# 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
def jiecheng(n):
	sum=1
	while n>0:
		sum*=n
		n-=1
	return sum
n=int(input())
output=0
while True:
	output+=jiecheng(n)
	n-=1
	if n==0:
		break
print(output)