在给定范围内偶数和奇数的数目给定下限x和上限y,如果我们要计算范围内奇数和偶数的数量,我们可以选择使用for循环的常规方法,并从下限迭代到上限,检查范围内的每个数字是否能被2整除,例如: 在C:
输出: ![在给定范围内偶数和奇数的数目](https://static.javatpoint.com/cpages/images/number-of-even-and-odd-numbers-in-a-given-range.png) 当我们给出几百的小范围时,代码可以正常工作,但当我们尝试尝试更大的范围(更高的上限)时,代码需要更多的时间。就像上面的例子一样,它花了10.45秒。 每次要写代码时,把错误放在一边,代码的效率总是由以下因素决定的:
- 时间
- 空间
我们应该用合理的逻辑不花太多时间来解决这个问题。 逻辑:让我们举一些例子,然后我们自己来做一个公式: 下限= L 上限= R 包含两个极限(N)的范围内的数字个数:(R - L + 1)
- 当N是偶数时:
例如: 下限= 10 上限= 15 N = 15 - 10 + 1 = 6 数字:[10,11,12,13,14,15] 偶数数:N/2 = 3 = [10,12,16] 奇数个数:N/2 = 3 = [11,13,15]
- 当N为奇数时:
- 当下限和上限为偶数时:
例如: 下限= 10 上限= 16 N = 16 - 10 + 1 = 7 奇数= [11,13,15]-> 7/2 = 3 偶数= [10,12,14,16]-> N -奇数= 7 -3 = 4
- 当下限和上限为奇数时:
例如: 下限= 11 上限= 15 N = 15 - 11 + 1 = 5 奇数= [11,13,15]-> 5/2 + 1 = 3 偶数= [12,14]-> N -奇数= 5 - 3 = 2
所以:
- 当范围内有偶数个数字时,其中一半是偶数,另一半是奇数。
- 当我们有奇数个数字时
- 如果下限和上限均为偶数,则奇数个数:下限(N/2)
- 如果下限和上限均为奇数,则奇数个数为:(N/2) + 1
现在让我们用这个逻辑在C语言中设计一个程序:
输出:
- 我们检查了数字的数量(count)是否为偶数,当下限和上限都是不同类型(偶数,奇数)时,就会发生这种情况。
3.456 23.45
- 现在,剩下的两种情况是当上限和上限都是同一种情况:
23.4 - >奇数:3/2 = 1 3.45 ->奇数:3/2 + 1 = 2
我们也可以使用等差级数: 通过使用nthAP的项公式:A + (n - 1)*d 我们可以求出偶数的个数,也可以求出奇数的个数,然后从总数中减去这个数来求另一个数。 让我们为不同的情况编写代码: Case1:下限和上限是偶的: 假设我们要找出10到20的偶数个数: 1011121314151617181920. 观察:
- 这些数字在d = 1的AP中
- 粗体数字是在另一个AP中,d = 2
- 所以,我们可以找到20在加粗AP中的位置,来求区间内偶数的个数:
20 = 10 + (n - 1)*2 10 = (n - 1)*2 5 = (n - 1) N = 6
- 现在,11 - 6 = 4个奇数。
情形2:下限和上限为奇数 假设我们要找出10到20的偶数个数: 111213141516171819 观察:
- 这些数字在d = 1的AP中
- 粗体数字是在另一个AP中,d = 2
- 第一项= a = a + 1 = 12
- 现在,我们可以找到(last term - 1) = 18的位置来找到偶数的个数,就像前面的例子一样:
18 = 12 + (n - 1)*2 6 = (n - 1)*2 3 = (n - 1) N = 4
- 现在,奇数的个数= 9 - 4 = 5
情况3:奇下限,偶上限 假设我们要找出10到20的偶数个数: 11121314151617181920. 观察:
- 这些数字在d = 1的AP中
- 粗体数字是在另一个AP中,d = 2
- 第一项= a = a + 1 = 12
- 现在,我们可以找到上一项= 20的位置,以找到与第一种情况类似的偶数的个数:
20 = 12 + (n - 1)*2 8 = (n - 1)*2 4 = (n - 1) N = 5
- 现在,奇数的个数= 10 - 5 = 5
情形4:偶数下限和奇数上限 假设我们要找出10到20的偶数个数: 121314151617181920.21 观察:
- 这些数字在d = 1的AP中
- 粗体数字是在另一个AP中,d = 2
- 第一项= a = 12
- 现在,我们可以找到上一项的位置-1 = 20,以找到与第一种情况类似的偶数的个数:
20 = 12 + (n - 1)*2 8 = (n - 1)*2 4 = (n - 1) N = 5
- 现在,奇数的个数= 10 - 5 = 5
所以,把它们都放在一个地方:
- 如果下限和上限都是偶数,我们可以用nth-项公式
- 如果下限或上限中有一个是奇数,我们需要修改极限:
低=低+ 1 Upper = Upper - 1
计划:
输出:
下限输入:10上限输入:20偶数个数:6奇数个数:5
编程技能都是关于思考能力的。注意,我们上面讨论的两种方法是相似的。
|