在2023年的全国青少年信息学奥林匹克竞赛(NOC)软件创意编程复赛中,Python小高组的题目设计涵盖了实用的编程技能。第一个问题是关于计算员工年终奖,考察了基础条件分支结构以及变量操作。
1. 年终奖计算:
根据题目描述,需要编写一个程序,根据公司年度利润(M)与员工当月工资(m)来计算年终奖。首先,我们需要判断公司的年度利润范围:
- 如果 M <= 10,年终奖为工资的3倍,代码实现如下:
```python
m *= 3
```
- 如果 10 < M <= 20,年终奖为工资的5倍,这里没有直接的代码实现,但可以补全:
```python
if M <= 20:
m *= 5
```
- 最后,如果 M > 20,年终奖为工资的8倍,这部分同样没有直接给出,应该补充:
```python
else:
m *= 8
```
最后,输出员工年终奖金额:
```python
print(m)
```
参考的完整代码应该是:
```python
M = int(input())
m = int(input())
if M <= 10:
m *= 3
elif M <= 20:
m *= 5
else:
m *= 8
print(m)
```
第二个问题是关于求解两个正整数的最大公约数,采用欧几里得算法(辗转相除法)。函数`gcd(a, b)`的实现步骤如下:
- 首先,交换a和b的值,确保a始终大于或等于b:
```python
if a < b:
a, b = b, a
```
- 使用while循环,直到b等于0(即余数为0):
```python
while b != 0:
```
- 计算余数r:
```python
r = a % b
```
- 更新a为b,b为r:
```python
a = b
b = r
```
- 当b为0时,a就是最大公约数,返回a:
```python
return a
```
完整的`gcd`函数实现:
```python
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
r = a % b
a = b
b = r
return a
a = int(input())
b = int(input())
print(gcd(a, b))
```
这两个问题都考察了参赛者的基本逻辑思维、条件控制以及对Python基本语法的理解和应用。同时,它们也强调了算法理解与实际编程的结合,有助于提升学生的实际编程能力和数学思维。