一、实操题
1、求和
【题目描述】
输入一个正整数 N(N < 100),输出 1 到 N(包含 1 和 N)之间所有奇数的和。
【输入描述】
输入一个正整数 N(N < 100)
【输出描述】
输出 1 到 N 之间的所有奇数的和
【输入样例】
3
【输出样例】
4
参考答案:对于输入的正整数N,我们可以使用等差数列求和公式来计算1到N之间所有奇数的和。等差数列求和公式为:S = n/2 * (a1 + an),其中n为项数,a1为第一项,an为第n项。在这个问题中,n = N/2(因为1到N之间有N/2个奇数),a1 = 1,an = N(因为最后一个奇数是N)。所以,1到N之间所有奇数的和为:S = (N/2) * (1 + N)。
解析:【喵呜刷题小喵解析】:
这个问题是一个简单的数学问题,可以通过等差数列求和公式来解决。在这个问题中,我们需要计算1到N之间所有奇数的和,因此可以使用等差数列求和公式。由于1到N之间有N/2个奇数,我们可以将这些奇数看成一个等差数列,其中第一项a1=1,最后一项an=N,项数n=N/2。因此,我们可以使用等差数列求和公式S = n/2 * (a1 + an)来计算奇数的和。在这个问题中,n = N/2,a1 = 1,an = N,所以奇数的和S = (N/2) * (1 + N)。
2、求平方
【题目描述】
平方是一种运算,比如:a 的平方表示 a × a。
例如:2 的平方为 4(也就是 2*2 的积)
例如:4 的平方为 16(也就是 4*4 的积)
输入一个正整数 N(N < 30),输出 1 到 N(包含 1 和 N)之间所有正整数的平方,且所输出的平方数之间以英文逗号隔开。
【输入描述】
输入一个正整数 N(N < 30)
【输出描述】
输出所有正整数的平方数,以英文逗号隔开
【输入样例】
3
【输出样例】
1,4,9
参考答案:对于输入的正整数N,我们需要计算从1到N之间所有正整数的平方,并以英文逗号隔开输出。
解析:【喵呜刷题小喵解析】:
根据题目描述,我们需要计算从1到N之间所有正整数的平方,并以英文逗号隔开输出。
首先,我们需要读取输入的正整数N。然后,使用一个循环从1遍历到N,计算每个数的平方,并将结果存储在一个字符串中。最后,将字符串输出即可。
在输出时,我们需要使用英文逗号将每个平方数隔开。可以使用字符串拼接的方式来实现。
具体的实现代码如下:
```python
N = int(input())
result = ""
for i in range(1, N+1):
result += str(i*i) + ","
print(result[:-1])
```
其中,`input()`函数用于读取输入的正整数N,`range(1, N+1)`用于生成从1到N的整数序列,`str(i*i)`用于计算每个数的平方,并将结果转换为字符串类型。在拼接字符串时,需要在每个平方数后面加上英文逗号。最后,使用`print()`函数将结果输出。
需要注意的是,输出字符串的最后一个逗号需要去掉,因此使用`result[:-1]`来截取字符串。
3、数位递增数
【题目描述】
一个正整数如果任何一个数位小于等于右边相邻的数位,则称为一个数位递增数。
例如:
1135 是一个数位递增数
1024 不是一个数位递增数
输入一个正整数 n(11<n<10001),输出 11 到 n(包含11和n)中有多少个数位递增数。
例如:输入 15,11 到 15 之间的数位递增数有:11、12、13、14、15。一共有 5 个。
【输入描述】
输入一个正整数 n(11<n<10001)
【输出描述】
输出 11 到 n 中有多少个数位递增数
【输入样例】
15
【输出样例】
5
参考答案:对于输入的正整数n,我们需要统计从11到n之间有多少个数位递增数。
解析:【喵呜刷题小喵解析】:
数位递增数的定义是:一个正整数如果任何一个数位小于等于右边相邻的数位,则称为一个数位递增数。
对于这个问题,我们可以使用编程来解决。具体步骤如下:
1. 从11开始,逐个检查每个数是否为数位递增数。
2. 对于每个数,我们可以将其转换为字符串,然后逐个比较相邻的数位。如果当前数位大于或等于右边的数位,则继续检查下一个数位;否则,该数不是数位递增数,跳过检查下一个数。
3. 统计所有数位递增数的数量,即为答案。
需要注意的是,由于n的范围是11到10000,因此我们需要考虑数位递增数的最大长度是4位。因此,我们可以使用一个长度为4的数组来存储每个数位上的数字,然后逐个比较相邻的数位。
此外,由于题目要求统计的是11到n之间的数位递增数,因此我们需要从11开始逐个检查每个数,直到检查到n为止。这样可以确保我们不会漏掉任何一个数位递增数。
因此,我们可以使用编程来实现这个过程,输出从11到n之间的数位递增数的数量。
4、最短距离
【题目描述】
有一个居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3……,当排满一行时,从下一行相邻的楼往反方向排号。
例如:小区为 3 行 6 列,矩阵排列方式:
要求:已知小区楼房有 w 列及两个楼房楼号 m 和 n,求从 m 号楼到 n 号楼之间的最短路线经过几个楼(不能斜线方向移动)。
例如上图:当 w=6,m=8,n=2,从 8 号楼到 2 号楼最短的路线经过 5,4,3,2 四个楼(9,10,11,2 也经过四个楼),故最短路线为 4(注:不考虑路线只考虑最短路线经过几个楼)。
输入三个正整数 w(1<w<21),m(1<m<10001),n(1<n<10001),且 m 不等于n。三个正整数之间以一个空格隔开,输出m 到n的最短路线经过几个楼。
【输入描述】
在一行输入三个正整数 w,m,n,三个正整数之间以一个空格隔开
【输出描述】
输出 m 到 n 的最短路线经过几个楼
【输入样例】
6 8 2
【输出样例】
4
参考答案:```#include
解析:【喵呜刷题小喵解析】:
这个问题可以通过模拟的方式解决。我们可以从 m 出发,按照楼房的排列规则,逐步向 n 移动,同时记录经过的楼房数量。
首先,我们需要判断 m 和 n 的位置。由于楼房按照矩阵排列,且编号从 1 开始,我们可以发现 m 和 n 一定是处于某行或某列,我们可以称之为行编号 row 和列编号 col。
我们先让 m 小于 n,方便计算。
然后,我们需要判断 m 是在第一行还是第二行。如果是第一行,m 除以 w 的余数为 1,否则 m 除以 w 的余数不为 1。如果 m 在第一行,那么 m 是在第 col 列,我们让 col 自增 1,并让 m 自减 1。否则,m 是在第 row 行,我们让 row 自增 1,并让 m 减去 w。
接着,我们让 path 自增 1,表示经过了一个楼房。
然后,我们判断 m 是否等于 n,如果等于,说明已经找到了最短路径,直接跳出循环。
如果不等于,我们让 n 加上 w,并让 row 自增 1,表示向下一行移动。然后我们判断 n 是在第一列还是第二列,如果是第一列,n 除以 w 的余数为 1,否则 n 除以 w 的余数不为 1。如果 n 在第一列,那么 n 是在第 col 列,我们让 col 自增 1,并让 n 自增 1。否则,n 是在第 row 行,我们让 row 自增 1,并让 n 加上 w。
最后,我们返回 path,表示从 m 到 n 的最短路径经过的楼房数量。
注意,在 C++ 中,我们可以使用 vector 来存储楼房的编号,方便计算。但是在这个问题中,由于楼房的编号是连续的,我们可以直接用一个整数来表示楼房的编号,因此不需要使用 vector。
5、组合
【题目描述】
输入两个正整数 n 和 m(20 >= m >= n > 0),n 代表正整数的个数,要求 n 个正整数相加的和为 m,输出满足这个条件的正整数组合有多少。
例如:当 n=4,m=8 时,满足条件的有 5 组(也就是:5+1+1+1=8,4+2+1+1=8,3+3+1+1=8,3+2+2+1=8,2+2+2+2=8,每组组合都由 4 个正整数组成且 4 个正整数的和等于 8)
【输入描述】
分行输入 n 和 m(20>=m>=n>0)
【输出描述】
输出满足这个条件的正整数组合有多少
【输入样例】
4 8
【输出样例】
5
参考答案:对于给定的n和m,可以使用动态规划来解决这个问题。
解析:【喵呜刷题小喵解析】:
这个问题可以通过动态规划来解决。首先,我们定义一个二维数组dp,其中dp[i][j]表示使用i个正整数,其和为j的方案数。
然后,我们可以使用递推式来填充这个数组。对于每个i和j,我们可以考虑使用i-1个正整数,其和为k(其中k的取值范围是[0, j-1]),然后加上一个正整数j-k。这样,dp[i][j]就等于dp[i-1][k]乘以dp[1][j-k]。
最后,我们只需要返回dp[n][m]即可,表示使用n个正整数,其和为m的方案数。
具体来说,动态规划的转移方程如下:
dp[i][j] = sum{dp[i-1][k] * dp[1][j-k] | 0 <= k < j}
其中,dp[1][j]表示使用一个正整数,其和为j的方案数。当j=1时,dp[1][1]=1;当j>1时,dp[1][j]=0。
最后,我们只需要遍历n和m,使用动态规划计算出dp[n][m]即可。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!