pta练习5-1 求m到n之和 (10 分)

本题要求实现一个计算m~n(m<n)之间所有整数的和的简单函数。

函数接口定义:
int sum( int m, int n );
其中m和n是用户传入的参数,保证有m<n。函数返回的是m~n之间所有整数的和。

裁判测试程序样例:
#include <stdio.h>

int sum(int m, int n);

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("sum = %d\n", sum(m, n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
-5 8
输出样例:
sum = 21

int sum( int m, int n )
{
	int i,sum=0;
	for(i=m;i<=n;i++){
		sum=sum+i;
	}
	return sum; 
}
### PTA 团体程序设计天梯赛 L1 题目及解析 #### 关于PTA团体程序设计天梯赛 PTA(Programming Teaching Assistant)是一个在线编程评测平台,广泛用于高校计算机课程的教学以及竞赛训练。团体程序设计天梯赛是一项面向全国大学生的编程比赛,为多个级别,其中L1是最基础的部,主要考察选手的基础算法能力代码实现能力。 以下是关于L1级别的几道经典题目及其解答思路: --- #### **L1-1 编程解决一切 (5)** **问题描述**: 输入一个整数N,输出其二进制表示形式中的'1'的数量。 **解决方案**: 可以通过位运算来统计二进制中'1'的数量。具体方法如下:每次将数字与`n-1`按位与操作后,会消除最低位的一个‘1’,直到整个数字变为零为止。这种方法的时间复杂度为O(k),k为二进制中'1'的数量[^2]。 ```python def count_ones(n): count = 0 while n: n &= (n - 1) # 清除最低位的1 count += 1 return count # 测试样例 print(count_ones(9)) # 输出应为2 ``` --- #### **L1-2 字符串反转 (10)** **问题描述**: 给定一个字符串S,将其逆序输出。如果输入为空,则返回空字符串。 **解决方案**: 使用Python内置切片功能可以轻松完成字符串反转的任务。对于其他语言如C++或Java,可以通过双指针法交换首尾字符逐步实现反转[^3]。 ```python def reverse_string(s): return s[::-1] # 测试样例 print(reverse_string("hello")) # 输出应为"olleh" ``` --- #### **L1-3 数字 (15)** **问题描述**: 输入一串由空格隔的正整数序列,计算这些数字之和并输出结果。注意处理可能存在的非法数据情况。 **解决方案**: 将输入按照空格割成列表,逐一转换为整型数值后再累加即可。为了增强鲁棒性,在实际应用中还需要加入异常捕获机制以应对潜在错误输入[^4]。 ```python try: numbers = list(map(int, input().split())) total_sum = sum(numbers) print(total_sum) except ValueError as e: print(f"Error: {e}") ``` --- #### **L1-4 判断素数 (20)** **问题描述**: 对给定范围内的所有自然数判断是否为质数,并打印所有的质数集合。 **解决方案**: 质数是指除了1它本身外无法被任何其它数整除的大于1的自然数。一种高效的检测方式是从2到sqrt(N)之间遍历因子是否存在;或者采用埃拉托斯特尼筛法预先筛选出一定区间内的全部质数[^5]。 ```python import math def is_prime(num): if num < 2: return False sqrt_num = int(math.sqrt(num)) for i in range(2, sqrt_num + 1): if num % i == 0: return False return True # 打印指定范围内所有质数 lower, upper = map(int, input().split()) primes = [i for i in range(lower, upper+1) if is_prime(i)] print(primes) ``` --- #### **L1-5 排列组合计数 (25)** **问题描述**: 计算从M个不同元素里选取N个的不同排列数目P(M,N)=M!/(M-N)! 组合数目C(M,N)=P(M,N)/N!= M!/((M-N)!*N!) 。 **解决方案**: 运用阶乘定义直接展开公式进行递推计算能够有效减少重复劳动量的同时提高精度控制水平[^6]。 ```python from functools import reduce def factorial(x): return reduce(lambda a,b:a*b,range(1,x+1),1) m,n=map(int,input().strip().split()) if m>=n and n>0 : pmn=factorial(m)//factorial(m-n) cmn=pmn//factorial(n) else: raise Exception('Invalid Input') print(pmn,cmn) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值