OJ赛氪100道基础算法题(完整python版 AC代码)
前言
本文档汇总赛氪OJ全部100道基础算法题,包含原题描述+可直接提交的Python AC代码,适配赛氪评测规则:兼容单组/多组输入、无多余输出、语法零错误,适合零基础算法入门、期末刷题、竞赛基础训练。
第1题 A+B Problem
题目:输入两个整数 a,b,输出 a+b 的结果。
输入:一行两个整数
输出:一个整数
a, b = map(int, input().split())
print(a + b)
第2题 多组A+B
题目:多组测试用例,每组一行两个整数,读到文件结束为止,每组输出两数之和。
import sys
for line in sys.stdin:
line = line.strip()
if not line:
continue
a, b = map(int, line.split())
print(a + b)
第3题 Hello World
题目:输出字符串 Hello World。
print("Hello World")
第4题 字符输出
题目:输入一个字符,原样输出该字符。
输入:单个字符
输出:该字符
c = input().strip()
print(c)
第5题 三数之和
题目:输入三个整数,输出它们的和。
a, b, c = map(int, input().split())
print(a + b + c)
第6题 判断奇偶
题目:输入一个整数n,如果是奇数输出odd,偶数输出even。
n = int(input())
if n % 2 == 0:
print("even")
else:
print("odd")
第7题 成绩等级
题目:输入0‑100的整数分数。90~100输出A;80‑89输出B;70‑79输出C;60‑69输出D;小于60输出E。
score = int(input())
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
elif score >= 60:
print("D")
else:
print("E")
第8题 三数最大值
题目:输入三个整数,输出其中最大值。
a, b, c = map(int, input().split())
print(max(a, b, c))
第9题 判断闰年
题目:输入年份y,是闰年输出yes,否则no。闰年规则:能被4整除且不能被100整除,或者能被400整除。
y = int(input())
if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
print("yes")
else:
print("no")
第10题 三角形判定
题目:输入三个正整数a,b,c代表三边,能构成三角形输出yes,否则no。三角形条件:任意两边之和大于第三边。
a, b, c = map(int, input().split())
if a + b > c and a + c > b and b + c > a:
print("yes")
else:
print("no")
第11题 1到n求和
题目:输入n,计算 1+2+3+…+n 的值。
n = int(input())
total = 0
for i in range(1, n + 1):
total += i
print(total)
第12题 n的阶乘
题目:输入n,输出n! = 1×2×…×n。
n = int(input())
res = 1
for i in range(1, n + 1):
res *= i
print(res)
第13题 输出1‑n之间所有偶数
题目:输入n,从小到大输出1~n中全部偶数,空格分隔。
n = int(input())
for i in range(2, n + 1, 2):
print(i, end=" ")
print()
第14题 斐波那契数列第n项
题目:f(1)=1,f(2)=1,f(n)=f(n‑1)+f(n‑2)。输入n,输出第n项。
n = int(input())
if n == 1 or n == 2:
print(1)
else:
a, b = 1, 1
for _ in range(3, n + 1):
a, b = b, a + b
print(b)
第15题 水仙花数
题目:输出所有三位数水仙花数:一个三位数,各位数字立方之和等于它本身。
for num in range(100, 1000):
hun = num // 100
ten = num // 10 % 10
one = num % 10
if hun**3 + ten**3 + one**3 == num:
print(num)
第16题 最大公约数GCD
题目:输入两个正整数,输出它们最大公约数。
import math
a, b = map(int, input().split())
print(math.gcd(a, b))
第17题 最小公倍数LCM
题目:输入两个正整数,输出最小公倍数。LCM(a,b)=a*b//gcd(a,b)
import math
a, b = map(int, input().split())
g = math.gcd(a, b)
lcm = a * b // g
print(lcm)
第18题 素数判断
题目:输入整数n,若是质数输出yes,否则no。质数:大于1,只能被1和自身整除。
n = int(input())
is_p = True
if n<= 1:
is_p = False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
is_p = False
break
print("yes" if is_p else "no")
第19题 数组最大值最小值
题目:一行输入若干整数,输出最大值、最小值,空格隔开。
arr = list(map(int, input().split()))
print(max(arr), min(arr))
第20题 数组反转
题目:输入若干整数,将数组反转后输出,空格分隔。
a = list(map(int, input().split()))
a.reverse()
print(" ".join(map(str, a)))
第21题 统计数字出现次数
题目:第一行输入若干整数组成数组,第二行输入一个整数x,统计x在数组中出现多少次并输出。
nums = list(map(int, input().split()))
x = int(input())
print(nums.count(x))
第22题 字符串反转
题目:输入一行字符串,将字符串反转输出。
s = input().strip()
print(s[::-1])
第23题 大小写转换
题目:输入一行英文字符串,第一行输出全部转大写,第二行输出全部转小写。
s = input()
print(s.upper())
print(s.lower())
第24题 回文字符串
题目:输入字符串,如果是回文输出yes,否则输出no。回文:正读和反读完全一样。
s = input().strip()
if s == s[::-1]:
print("yes")
else:
print("no")
第25题 数组求和与平均值
题目:输入若干整数,输出数组总和与平均值。
arr = list(map(int, input().split()))
s = sum(arr)
avg = s / len(arr)
print(s, avg)
第26题 数组升序排序
题目:输入若干整数,从小到大排序后输出,空格分隔。
a = list(map(int, input().split()))
a.sort()
print(" ".join(map(str, a)))
第27题 数组降序排序
题目:输入若干整数,从大到小排序输出,空格分隔。
a = list(map(int, input().split()))
a.sort(reverse=True)
print(" ".join(map(str, a)))
第28题 二分查找
题目:第一行输入已经升序的数组,第二行输入x,x存在输出yes,不存在输出no。
def binary_search(arr, x):
l, r = 0, len(arr)-1
<= r:
mid = (l + r) // 2
if arr[mid] == x:
return True
elif arr[< x:
l = mid + 1
else:
r = mid - 1
return False
data = list(map(int, input().split()))
target = int(input())
print("yes" if binary_search(data, target) else "no")
第29题 硬币问题(贪心)
题目:现有面额25、10、5、1的硬币,输入总金额n,求最少需要多少枚硬币。
n = int(input())
coins = [25, 10, 5, 1]
cnt = 0
for c in coins:
cnt += n // c
n = n % c
print(cnt)
第30题 直角星号三角形
题目:输入n,打印n行直角三角形,第i行i个*。
n = int(input())
for i in range(1, n+1):
print("*" * i)
第31题 九九乘法表
题目:输出完整九九乘法表。
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}*{i}={i*j}", end=" ")
print()
第32题 数字各位和
题目:输入整数n,求它每一位数字相加的总和。例如123 →1+2+3=6。
n = int(input())
total = 0
while n > 0:
total += n % 10
n = n // 10
print(total)
第33题 素数筛
题目:输入n,输出1~n之间所有质数,空格分隔。
n = int(input())
is_prime = [True]*(n+1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
for j in range(i*i, n+1, i):
is_prime[j] = False
res = []
for idx, val in enumerate(is_prime):
if val:
res.append(str(idx))
print(" ".join(res))
第34题 倒序输出1‑n
题目:输入n,从n到1倒序输出全部整数,空格隔开。
n = int(input())
for i in range(n, 0, -1):
print(i, end=" ")
print()
第35题 求平方和
题目:输入n,计算 1²+2²+…+n²。
n = int(input())
s = 0
for i in range(1, n+1):
s += i*i
print(s)
第36题 统计字符串字母数字空格其他
题目:输入一行字符串,统计:大写字母、小写字母、数字、空格、其他字符的数量,依次输出。
s = input()
upper = lower = digit = space = other = 0
for ch in s:
if ch.isupper():
upper +=1
elif ch.islower():
lower +=1
elif ch.isdigit():
digit +=1
elif ch == " ":
space +=1
else:
other +=1
print(upper, lower, digit, space, other)
第37题 输出空心正方形
题目:输入n,打印n行n列空心由*组成正方形。
n = int(input())
for i in range(n):
for j in range(n):
if i==0 or i==n-1 or j==0 or j==n-1:
print("*",end="")
else:
print(" ",end="")
print()
第38题 斐波那契前n项
题目:输入n,输出斐波那契数列前n项,空格分隔 f1=1 f2=1。
n = int(input())
lst = []
a,b = 1,1
for i in range(n):
lst.append(str(a))
a,b = b,a+b
print(" ".join(lst))
第39题 区间质数
题目:输入两个整数L,R,输出[L,R]区间里面所有质数。
def is_prime(x):
<=1:
return False
for i in range(2,int(x**0.5)+1):
if x%i ==0:
return False
return True
L,R = map(int,input().split())
ans = []
for num in range(L,R+1):
if is_prime(num):
ans.append(str(num))
print(" ".join(ans))
第40题 数组元素去重
题目:输入一行整数,去除重复数字,保持原有相对顺序输出。
arr = list(map(int, input().split()))
new_arr = []
for x in arr:
if x not in new_arr:
new_arr.append(x)
print(" ".join(map(str, new_arr)))
第41题 完全数
题目:完全数:一个正整数等于除自身之外所有因子之和。例如6=1+2+3。输入n,输出1~n之间所有完全数。
n = int(input())
for num in range(2, n+1):
s = 0
for i in range(1, num//2 +1):
if num % i == 0:
s += i
if s == num:
print(num, end=" ")
print()
第42题 猴子吃桃
题目:猴子第一天摘下若干桃子,当即吃一半,还多吃一个。之后每天吃剩余的一半多一个。第10天只剩1个桃子。求第一天桃子总数。
peach = 1
for _ in range(9):
peach = (peach + 1) * 2
print(peach)
第43题 阿姆斯特朗数
题目:输入n,找出所有n位阿姆斯特朗数:每一位数字的n次方之和等于数字本身。
n = int(input())
res = []
start = 10 ** (n-1)
end = 10 ** n
for num in range(start, end):
s = 0
tmp = num
while tmp > 0:
digit = tmp % 10
s += digit ** n
tmp = tmp //10
if s == num:
res.append(str(num))
print(" ".join(res))
第44题 最大最小数交换位置
题目:输入数组,将数组中最大值和最小值交换位置后输出数组。
arr = list(map(int, input().split()))
max_idx = arr.index(max(arr))
min_idx = arr.index(min(arr))
arr[max_idx], arr[min_idx] = arr[min_idx], arr[max_idx]
print(" ".join(map(str, arr)))
第45题 统计素数个数
题目:输入L,R,统计区间[L,R]一共有多少个素数,输出数量。
def is_prime(x):
if x<= 1:
return False
for i in range(2,int(x**0.5)+1):
if x % i == 0:
return False
return True
L, R = map(int, input().split())
cnt = 0
for i in range(L, R+1):
if is_prime(i):
cnt += 1
print(cnt)
第46题 字符串单词分割
题目:输入一行英文句子,以空格分隔单词,输出每个单词,每行一个。
s = input()
words = s.split()
for w in words:
print(w)
第47题 查找子串
题目:输入主字符串s,再输入子串t,若t在s中,输出第一次出现的下标,否则输出-1。
s = input().strip()
t = input().strip()
pos = s.find(t)
print(pos)
第48题 矩阵转置
题目:第一行输入n,m,n行每行m个整数,输出转置矩阵(行变列)。
n, m = map(int, input().split())
mat = []
for _ in range(n):
row = list(map(int, input().split()))
mat.append(row)
for j in range(m):
line = []
for i in range(n):
line.append(str(mat[i][j]))
print(" ".join(line))
第49题 杨辉三角
题目:输入n,输出n行杨辉三角。
n = int(input())
tri = []
for i in range(n):
row = [1]*(i+1)
for j in range(1,i):
row[j] = tri[i-1][j-1] + tri[i-1][j]
tri.append(row)
print(" ".join(map(str,row)))
第50题 交错多项式求和
题目:输入n,计算 S = 1 - 1/2 + 1/3 -1/4 + … + ((-1)**(n+1))/n
n = int(input())
s = 0.0
for i in range(1, n+1):
if i %2 ==1:
s += 1/i
else:
s -= 1/i
print(s)
第51题 冒泡排序
题目:输入数组,手写冒泡排序升序输出,不许直接调用sort()。
arr = list(map(int, input().split()))
length = len(arr)
for i in range(length):
for j in range(0, length-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print(" ".join(map(str, arr)))
第52题 选择排序
题目:手写选择排序对数组升序排序输出。
arr = list(map(int, input().split()))
n = len(arr)
for i in range(n):
min_pos = i
for j in range(i+1,n):
if arr[j< arr[min_pos]:
min_pos = j
arr[i], arr[min_pos] = arr[min_pos], arr[i]
print(" ".join(map(str, arr)))
第53题 插入排序
题目:手写插入排序升序输出数组。
arr = list(map(int, input().split()))
n = len(arr)
for i in range(1,n):
key = arr[i]
j = i-1
while j>=0 and arr[j]>key:
arr[j+1] = arr[j]
j -=1
arr[j+1] = key
print(" ".join(map(str,arr)))
第54题 回文数字
题目:输入整数n,判断数字本身是否回文,是输出yes,否则no。如12321 yes。
n = input().strip()
if n == n[::-1]:
print("yes")
else:
print("no")
第55题 十进制转二进制
题目:输入十进制正整数n,输出对应二进制字符串,不要0b前缀。
n = int(input())
print(bin(n)[2:])
第56题 十进制转八进制
题目:输入n,输出八进制,去掉0o前缀。
n = int(input())
print(oct(n)[2:])
第57题 十进制转十六进制(大写)
题目:输入n,输出十六进制大写,去掉0X前缀。
n = int(input())
print(hex(n)[2:].upper())
第58题 统计数组偶数奇数个数
题目:输入数组,依次输出奇数个数、偶数个数。
arr = list(map(int, input().split()))
odd = even = 0
for x in arr:
if x % 2 == 0:
even += 1
else:
odd += 1
print(odd, even)
第59题 求数组第二大元素
题目:输入数组,输出第二大的数(不重复)。
a = list(map(int, input().split()))
s = list(set(a))
s.sort(reverse=True)
print(s[1])
第60题 大小写字母计数
题目:输入字符串,输出大写字母数量、小写字母数量。
s = input()
upper = lower = 0
for ch in s:
if ch.isupper():
upper +=1
elif ch.islower():
lower +=1
print(upper, lower)
第61题 二分法求平方根
题目:输入非负数n,用二分法求n的平方根,保留2位小数输出。
n = float(input())
left, right = 0, n
for _ in range(100):
mid = (left + right) / 2
if mid< n:
left = mid
else:
right = mid
print("{0:.2f}".format(left))
第62题 字符串删除指定字符
题目:第一行输入字符串s,第二行输入单个字符c,删除s中所有c字符,输出结果。
s = input().strip()
c = input().strip()
res = s.replace(c, "")
print(res)
第63题 数组右移k位
题目:数组向右循环移动k位。例如[1,2,3,4],k=1 → [4,1,2,3]
arr = list(map(int, input().split()))
k = int(input())
k = k % len(arr)
res = arr[-k:] + arr[:-k]
print(" ".join(map(str, res)))
第64题 数组左移k位
题目:数组向左循环移动k位。[1,2,3,4],k=1 → [2,3,4,1]
arr = list(map(int, input().split()))
k = int(input())
k = k % len(arr)
res = arr[k:] + arr[:k]
print(" ".join(map(str, res)))
第65题 完数因子输出
题目:输入一个完全数,输出它除去自身的全部因子,空格分隔。
n = int(input())
fac = []
for i in range(1, n//2 +1):
if n % i == 0:
fac.append(str(i))
print(" ".join(fac))
第66题 二维数组每行最大值
题目:第一行n,m;之后n行m个数字,输出每一行的最大值,每行一个。
n,m = map(int,input().split())
for _ in range(n):
row = list(map(int,input().split()))
print(max(row))
第67题 二维数组每列最小值
题目:n行m列矩阵,输出每一列的最小值,空格分隔。
n,m = map(int,input().split())
mat = []
for _ in range(n):
mat.append(list(map(int,input().split())))
ans = []
for j in range(m):
col = [mat[i][j] for i in range(n)]
ans.append(str(min(col)))
print(" ".join(ans))
第68题 凯撒密码加密(偏移3)
题目:小写字母向后偏移3位,a→d,y→b,z→c;其他字符不变。输入字符串输出加密后字符串。
s = input()
out = []
for ch in s:
if ch.islower():
idx = ord(ch) - ord('a')
new_idx = (idx + 3) % 26
out.append(chr(new_idx + ord('a')))
else:
out.append(ch)
print("".join(out))
第69题 凯撒密码解密(偏移3)
题目:凯撒密码解密,小写字母向前偏移3位。其他字符不变。
s = input()
out = []
for ch in s:
if ch.islower():
idx = ord(ch) - ord('a')
new_idx = (idx - 3) % 26
out.append(chr(new_idx + ord('a')))
else:
out.append(ch)
print("".join(out))
第70题 分数化简
题目:输入分子a分母b,输出最简分数形式。例如 4 6 → 2/3
import math
a,b = map(int,input().split())
g = math.gcd(a,b)
print(f"{a//g}/{b//g}")
第71题 阶乘末尾0的个数
题目:输入n,求n!结果末尾有多少个连续的0。
n = int(input())
cnt = 0
while n > 0:
n = n //5
cnt += n
print(cnt)
第72题 统计单词个数
题目:输入一行句子,由空格分隔单词,统计一共有多少个单词。
s = input().strip()
words = s.split()
print(len(words))
第73题 寻找数组众数
题目:输入数组,输出出现次数最多的数字,如果多个输出最先出现那一个。
arr = list(map(int,input().split()))
max_cnt = 0
mode = arr[0]
for x in arr:
c = arr.count(x)
if c > max_cnt:
max_cnt = c
mode = x
print(mode)
第74题 倒三角星号
题目:输入n,打印n行星号倒直角三角形。
n = int(input())
for i in range(n,0,-1):
print("*"*i)
第75题 正等腰三角形
题目:输入n,输出n行等腰星号三角形。
n = int(input())
for i in range(1,n+1):
print(" "*(n-i)+"*"*(2*i-1))
第76题 计算两点距离
题目:输入x1 y1 x2 y2,求平面两点欧氏距离,保留两位小数。
import math
x1,y1,x2,y2 = map(float,input().split())
d = math.sqrt((x1-x2)**2 + (y1-y2)**2)
print("{0:.2f}".format(d))
第77题 字符串拼接重复
题目:输入字符串s与整数k,输出s重复k次拼接结果。
s = input().strip()
k = int(input())
print(s*k)
第78题 子串出现总次数
题目:输入母串s,子串t,统计t在s中一共出现多少次。
s = input().strip()
t = input().strip()
cnt = 0
for i in range(len(s)-len(t)+1):
if s[i:i+len(t)] == t:
cnt +=1
print(cnt)
第79题 矩阵加法
题目:输入n,m;输入两个n*m矩阵,输出矩阵相加结果。
n,m = map(int,input().split())
A = [list(map(int,input().split())) for _ in range(n)]
B = [list(map(int,input().split())) for _ in range(n)]
for i in range(n):
row = [A[i][j]+B[i][j] for j in range(m)]
print(" ".join(map(str,row)))
第80题 3-4位水仙花数
题目:输出所有3‑4位水仙花数(阿姆斯特朗数)。
for num in range(100,10000):
s = str(num)
l = len(s)
total = 0
for ch in s:
total += int(ch)**l
if total == num:
print(num,end=" ")
print()
第81题 最大子段和
题目:输入一组整数,求连续子数组的最大和。
arr = list(map(int, input().split()))
cur_max = total_max = arr[0]
for num in arr[1:]:
cur_max = max(num, cur_max + num)
total_max = max(total_max, cur_max)
print(total_max)
第82题 递归求阶乘
题目:使用递归实现n的阶乘。
def fact(n):
if n == 1:
return 1
return n * fact(n-1)
n = int(input())
print(fact(n))
第83题 递归斐波那契
题目:递归求斐波那契第n项,f(1)=1,f(2)=1。
def fib(n):
if n ==1 or n ==2:
return 1
return fib(n-1)+fib(n-2)
n = int(input())
print(fib(n))
第84题 手动去除字符串首尾空格
题目:输入字符串,去掉开头和结尾空格,输出处理后的字符串(不使用strip内置函数)。
s = input()
left = < len(s) and s[left] == " ":
left += 1
right = len(s)-1
while right >=0 and s[right] == " ":
right -=1
res = s[left:right+1]
print(res)
第85题 求数组交集
题目:输入两行数组,输出两个数组的交集元素,保持顺序,不去重。
a = list(map(int,input().split()))
b = list(map(int,input().split()))
res = []
for x in a:
if x in b:
res.append(str(x))
print(" ".join(res))
第86题 求数组并集(去重)
题目:输入两个数组,合并去重输出全部元素。
a = list(map(int,input().split()))
b = list(map(int,input().split()))
s = set(a + b)
print(" ".join(map(str,s)))
第87题 数组差集 A-B
题目:输出属于A但不属于B的全部数字。
a = list(map(int,input().split()))
b = list(map(int,input().split()))
res = [str(x) for x in a if x not in b]
print(" ".join(res))
第88题 打印菱形星号
题目:输入n(奇数),输出菱形图案。
n = int(input())
half = n // 2
for i in range(half+1):
print(" "*(half-i)+"*"*(2*i+1))
for i in range(half-1,-1,-1):
print(" "*(half-i)+"*"*(2*i+1))
第89题 分数相加化简
题目:输入a b c d,计算 a/b + c/d,输出最简分数。
import math
a,b,c,d = map(int,input().split())
fz = a*d + c*b
fm = b*d
g = math.gcd(fz,fm)
print(f"{fz//g}/{fm//g}")
第90题 括号配对判断
题目:输入只包含()的字符串,括号完全匹配输出yes,否则no。
s = input().strip()
cnt = 0
for ch in s:
if ch == '(':
cnt +=1
else:
cnt -=1
< 0:
break
print("yes" if cnt == 0 else "no")
第91题 完数判断
题目:输入数字n,判断是否为完全数,是输出yes,否则no。
n = int(input())
s = 0
for i in range(1,n//2+1):
if n%i ==0:
s +=i
print("yes" if s == n else "no")
第92题 整数各位逆序输出
题目:输入整数,将各位数字颠倒输出,例如1234输出4321。
n = int(input())
res = 0
while n != 0:
res = res*10 + n%10
n = n //10
print(res)
第93题 寻找矩阵鞍点
题目:鞍点:该行最大值,同时该列最小值。输入n,m矩阵,输出鞍点坐标(行号列号,从0开始),没有输出none。
n,m = map(int,input().split())
mat = []
for _ in range(n):
mat.append(list(map(int,input().split())))
found = False
for i in range(n):
row_max = max(mat[i])
j = mat[i].index(row_max)
col_min = min([mat[x][j] for x in range(n)])
if row_max == col_min:
print(i,j)
found = True
if not found:
print("none")
第94题 回文素数
题目:输入L R,输出区间内既是素数又是回文数的数字。
def is_prime(x<=1:
return False
for i in range(2,int(x**0.5)+1):
if x%i ==0:
return False
return True
def is_huiwen(x):
s = str(x)
return s == s[::-1]
L,R = map(int,input().split())
ans = []
for num in range(L,R+1):
if is_prime(num) and is_huiwen(num):
ans.append(str(num))
print(" ".join(ans))
第95题 递归1~n求和
题目:用递归计算1+2+…+n。
def sum_n(n):
if n == 1:
return 1
return n + sum_n(n-1)
n = int(input())
print(sum_n(n))
第96题 字符串大小写互换
题目:输入字符串,大写变小写,小写变大写,其他字符不变输出。
s = input()
out = []
for ch in s:
if ch.islower():
out.append(ch.upper())
elif ch.isupper():
out.append(ch.lower())
else:
out.append(ch)
print("".join(out))
第97题 多组输入数组求和
题目:多组数据,每组一行若干整数,每组输出该行总和,读到文件结束。
import sys
for line in sys.stdin:
line = line.strip()
if not line:
continue
nums = list(map(int,line.split()))
print(sum(nums))
第98题 快速幂
题目:求 a^b mod m,a,b,m输入。
a,b,m = map(int,input().split())
res = 1
a = a % m
while b>0:
if b%2 ==1:
res = (res * a) % m
a = (a*a) % m
b = b //2
print(res)
第99题 n阶螺旋方阵
题目:输入n,输出n×n螺旋矩阵。
n = int(input())
mat = [[0]*n for _ in range(n)]
num = 1
top,bottom = 0,n-1
left,right = 0,n-1<= n*n:
for i in range(left,right+1):
mat[top][i]=num
num +=1
top +=1
for i in range(top,bottom+1):
mat[i][right]=num
num +=1
right -=1
for i in range(right,left-1,-1):
mat[bottom][i]=num
num +=1
bottom -=1
for i in range(bottom,top-1,-1):
mat[i][left]=num
num +=1
left +=1
for row in mat:
print(" ".join(map(str,row)))
第100题 字符串最长单词
题目:输入英文句子,输出长度最大的单词;多个最长输出第一个。
s = input().strip()
words = s.split()
max_len = -1
res_word = ""
for w in words:
if len(w) > max_len:
max_len = len(w)
res_word = w
print(res_word)
说明
- 全部AC:100道题目代码均适配赛氪OJ评测规则,无语法错误、无格式错误
- 全覆盖知识点:输入输出、分支循环、字符串、数组、排序、递归、贪心、数论、矩阵、模拟、基础算法
- 适用场景:大学生算法入门、Python基础刷题、计算机基础期末复习、竞赛零基础训练
更多推荐



所有评论(0)