算法编程试题==.docx
### 知识点总结 #### 程序1:斐波那契数列与兔子繁殖问题 - **问题描述**:一对兔子从出生后第3个月起每个月都会生育一对新兔子,而这些新兔子也在第3个月开始生育,假设兔子不死,计算每个月的兔子总数。 - **解题思路**: - 使用斐波那契数列解决这个问题,斐波那契数列定义为:F(n) = F(n-1) + F(n-2),其中F(1) = 1, F(2) = 1。 - 通过迭代的方式,可以高效地计算出任意月份数量。 - **代码实现**: ```python def fibonacci(n): if n <= 1: return n else: a, b = 0, 1 for _ in range(2, n + 1): a, b = b, a + b return b ``` #### 素数判断与生成 - **问题描述**:判断101-200之间有多少个素数,并输出所有素数。 - **解题思路**: - 素数定义:除了1和它本身外没有其他因数的自然数。 - 对于某个数n,只需要检查2到√n之间的数是否能整除n即可判断是否为素数。 - **代码实现**: ```python import math def is_prime(num): if num < 2: return False for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True def prime_numbers(start, end): primes = [] for num in range(start, end + 1): if is_prime(num): primes.append(num) return primes ``` #### 水仙花数识别 - **问题描述**:打印出所有的"水仙花数",即一个三位数,其各位数字立方和等于该数本身。 - **解题思路**: - 通过循环遍历100至999之间的所有数字。 - 分解数字为百位、十位、个位。 - 计算各位数字的立方和,判断是否等于原数。 - **代码实现**: ```python def narcissistic_numbers(): numbers = [] for num in range(100, 1000): hundreds = num // 100 tens = (num // 10) % 10 ones = num % 10 if num == hundreds**3 + tens**3 + ones**3: numbers.append(num) return numbers ``` #### 正整数分解质因数 - **问题描述**:将一个正整数分解为若干个质数的乘积。 - **解题思路**: - 从最小质数2开始,不断尝试除法直到无法整除。 - 每次除法成功,得到的商继续进行分解。 - 如果商大于2,则继续尝试除法,否则分解完成。 - **代码实现**: ```python def decompose(n): factors = [] divisor = 2 while divisor * divisor <= n: while n % divisor == 0: factors.append(divisor) n //= divisor divisor += 1 if n > 1: factors.append(n) return factors ``` #### 成绩等级划分 - **问题描述**:根据学生成绩的不同范围,给出相应的等级。 - **解题思路**: - 使用条件表达式判断成绩范围,返回对应的等级。 - **代码实现**: ```python def grade(score): return 'A' if score >= 90 else ('B' if 60 <= score < 90 else 'C') ``` #### 最大公约数与最小公倍数 - **问题描述**:输入两个正整数m和n,求其最大公约数和最小公倍数。 - **解题思路**: - 使用辗转相除法求最大公约数。 - 利用最大公约数计算最小公倍数。 - **代码实现**: ```python def gcd(m, n): while m % n != 0: old_m = m old_n = n m = old_n n = old_m % old_n return n def lcm(m, n): return m * n // gcd(m, n) ``` #### 字符分类计数 - **问题描述**:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 - **解题思路**: - 遍历字符串中的每一个字符,使用条件语句进行分类计数。 - **代码实现**: ```python def count_chars(s): letters = digits = spaces = others = 0 for ch in s: if ch.isalpha(): letters += 1 elif ch.isdigit(): digits += 1 elif ch.isspace(): spaces += 1 else: others += 1 return letters, digits, spaces, others ``` #### 数字序列求和 - **问题描述**:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 - **解题思路**: - 通过循环构建每一项的值,累加求和。 - **代码实现**: ```python def sequence_sum(a, n): total = 0 term = 0 for i in range(1, n + 1): term = term * 10 + a total += term return total ``` #### 完全数查找 - **问题描述**:找出1000以内的所有完全数,即一个数恰好等于它的因子之和。 - **解题思路**: - 通过遍历1至1000,对于每个数,找到其所有因子并求和。 - **代码实现**: ```python def perfect_numbers(limit): perfects = [] for num in range(1, limit): sum_factors = 0 for factor in range(1, num): if num % factor == 0: sum_factors += factor if sum_factors == num: perfects.append(num) return perfects ``` #### 落体运动模拟 - **问题描述**:一球从100米高度自由落下,每次落地后反跳回原高度的一半,求它在第10次落地时,共经过了多少米?第10次反弹多高? - **解题思路**: - 使用递归或循环结构计算每次落地后的总距离和反弹高度。 - **代码实现**: ```python def bouncing_ball(height, times): total_distance = height for _ in range(1, times): height /= 2 total_distance += height * 2 return total_distance, height / 2 ``` #### 组合数生成 - **问题描述**:使用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数? - **解题思路**: - 通过三层循环,每层代表百位、十位和个位,生成所有可能的组合。 - **代码实现**: ```python def generate_numbers(): results = [] for i in [1, 2, 3, 4]: for j in [1, 2, 3, 4]: for k in [1, 2, 3, 4]: if len({i, j, k}) == 3: results.append(i * 100 + j * 10 + k) return results ``` #### 奖金计算 - **问题描述**:企业发放的奖金根据利润提成,利润在不同区间内有不同的提成比例。 - **解题思路**: - 使用条件语句根据利润区间确定提成比例。 - **代码实现**: ```python def calculate_bonus(profit): bonus = 0 if profit <= 100000: bonus = profit * 0.1 elif profit <= 200000: bonus = 10000 + (profit - 100000) * 0.075 # ... 其他条件 return bonus ``` #### 平方数问题 - **问题描述**:一个整数加上100后是一个完全平方数,再加上168后又是一个完全平方数,求该数。 - **解题思路**: - 使用双重循环遍历可能的数,验证条件。 - **代码实现**: ```python def find_number(): for num in range(100000): if (int((num + 100) ** 0.5)) ** 2 == num + 100 and (int((num + 268) ** 0.5)) ** 2 == num + 268: return num ``` #### 日期计算 - **问题描述**:输入某年某月某日,判断这一天是这一年的第几天。 - **解题思路**: - 使用累积天数的方法,根据年份判断是否为闰年,以及输入月份的位置。 - **代码实现**: ```python def day_of_year(year, month, day): days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] is_leap_year = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) if is_leap_year: days_in_month[1] = 29 total_days = sum(days_in_month[:month - 1]) + day if month > 2 and is_leap_year: total_days += 1 return total_days ``` #### 数字排序 - **问题描述**:输入三个整数x,y,z,将这三个数由小到大输出。 - **解题思路**: - 使用条件语句比较大小,通过交换变量值实现排序。 - **代码实现**: ```python def sort_numbers(x, y, z): if x > y: x, y = y, x if x > z: x, z = z, x if y > z: y, z = z, y return x, y, z ``` #### 九九乘法表 - **问题描述**:输出9×9口诀。 - **解题思路**: - 使用两重循环,外层循环表示行,内层循环表示列。 - **代码实现**: ```python def multiplication_table(): for i in range(1, 10): for j in range(1, i + 1): print(f"{j}×{i}={i * j}", end="\t") print() ``` 以上就是基于给定文档内容的详细知识点总结。