然后在键盘上输入两个圆的半径(输入半径为浮点数,第一个圆半径大于第二个圆半径),调用求出圆环面积。(圆周率Pi=3.14,面积保留两位小数)
from math import pi
r1 = float(input("请输入第一个圆的半径:"))
r2 = float(input("请输入第二个圆的半径:"))
if r1 < r2:
print("第一个圆半径应大于第二个圆半径,请重新输入!")
else:
area = round( pi * pow(r1,2) - pi * pow(r2,2),2 )
print("圆环的面积为:", area)
def calculate_circle_area(radius):
# 计算圆的面积
area = 3.14 * radius**2
return round(area, 2)
def calculate_ring_area(radius1, radius2):
# 计算圆环的面积
area1 = calculate_circle_area(radius1)
area2 = calculate_circle_area(radius2)
ring_area = area1 - area2
return round(ring_area, 2)
# 从键盘上输入两个圆的半径
radius1 = float(input("请输入第一个圆的半径:"))
radius2 = float(input("请输入第二个圆的半径:"))
if radius1 < radius2:
print("第一个圆半径大于第二个圆半径,请重新输入!")
# 调用函数计算圆环的面积
ring_area = calculate_ring_area(radius1, radius2)
# 输出结果
print("圆环的面积为:", ring_area)
什么玩意儿,求圆面积怎么会同时输入两个圆半径?
def circle_area(radius):
"""
计算圆的面积
:param radius: 圆半径
:return: 圆的面积
"""
pi = 3.14
return pi * radius ** 2
# 从键盘输入圆的半径
radius = float(input("请输入圆的半径:"))
# 计算圆的面积
area = circle_area(radius)
# 输出结果,保留两位小数
print("圆的面积为:{:.2f}".format(area))
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种改进版。希尔排序的比较次数和移动次数都要比直接插入排序少,当N越大时,效果越明显。
算法思想:
我们举个例子来描述算法流程(以下摘自维基百科):
假设有这样一组数 {13, 14, 94, 33, 82, 25, 59, 94, 65, 23, 45, 27, 73, 25, 39, 10},如果我们以步长为 5 开始进行排序:
排序前 | 排序后 |
---|---|
13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 | 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 |
将上述四行数字,依序接在一起时我们得到:{10, 14, 73, 25, 23, 13, 27, 94, 33, 39, 25, 59, 94, 65, 82, 45},然后再以 3 为步长:
排序前 | 排序后 |
---|---|
10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 | 10 14 13 25 23 33 27 25 59 39 65 73 45 94 82 94 |
最后以 1 为步长进行排序(此时就是简单的插入排序了)。
可想而知,步长的选择是希尔排序的重要部分。算法最开始以一定的步长进行排序,然后会继续以更小的步长进行排序,最终算法以步长为 1 进行排序。当步长为 1 时,算法变为直接插入排序,这就保证了数据一定会被全部排序。
时间复杂度:平均:O(nlogn) 最坏:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
C代码实现:
void shell_sort(int *arr,int len,int gap)
{
int tmp;
int i,j;
for(i = gap; i<len; i = i+gap)
{
tmp = arr[i];
for(j = i -gap;j>=0;j=j-gap)
if(arr[j] > tmp)
arr[j+gap] = arr[j];
else
break;
arr[j+gap] = tmp;
}
}
void Shell(int *arr,int len)
{
int gap[] = {5,3,1}; //可以分为步长的一半,这里就自定义好了
int len_gap = sizeof(gap)/sizeof(gap[0]);
for(int i=0;i<len_gap;++i)
shell_sort(arr,len,gap[i]);
}
Python代码实现:
def shell_sort(arr:[int])->[int]:
g = [5,3,1]
for gap in g:
for i in range(gap,len(arr)):
tmp = arr[i]
j = i-gap
while j>=0 and arr[j] > tmp:
arr[j+gap] = arr[j]
j = j - gap
arr[j+gap] = tmp
return arr
答案:
首先,根据题目要求编写计算圆环面积的函数:
def area_of_ring(r1, r2):
pi = 3.14
area1 = pi * r1**2
area2 = pi * r2**2
return round(area1 - area2, 2)
然后,使用input方法从键盘上输入两个半径,调用函数计算圆环面积:
r1 = float(input("请输入第一个半径:"))
r2 = float(input("请输入第二个半径:"))
area = area_of_ring(r1, r2)
print("圆环面积为:", area)
其中,使用float将输入的字符串转化为浮点数,round函数保留两位小数。
完整代码如下:
def area_of_ring(r1, r2):
pi = 3.14
area1 = pi * r1**2
area2 = pi * r2**2
return round(area1 - area2, 2)
r1 = float(input("请输入第一个半径:"))
r2 = float(input("请输入第二个半径:"))
area = area_of_ring(r1, r2)
print("圆环面积为:", area)