学习时间:
2023年1月22日
题目描述:
![](https://i-blog.csdnimg.cn/blog_migrate/c180cb503e2876b71cd872d7c2fc88c3.png)
题解分享:
// 作 者 : 繁 华 倾 夏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 力扣(LeetCode):1523. 在区间范围内统计奇数数目
// low:左边界 high:右边界
int countOdds(int low, int high) {
// 本题采用数学公式进行推导
// 当low和high都为偶数时,两者之差再除以2,即为奇数个数
if (low % 2 != 1 && high % 2 != 1) {
return (high - low) / 2;
}
// 当low为奇数,high为偶数
// 当low为偶数,high为奇数
// 当low为奇数,high为奇数
// 得到的情况都是两者之差除以2,再加1,即为奇数个数
else {
return ((high - low) / 2) + 1;
}
// 笔者开始时候采用暴力循环解决问题
// 虽然程序能够正常运行
// 但是运行时间超过时间限制
// 所以此题采用暴力循环不妥
// 这道题考察的是让我们在做题时
// 尽可能采用简便算法懂得思考
// int s=0;
// for(int i=low;i<=high;i++){
// if(i%2==1){
// s++;
// }
// }
// return s;
// 另外下方式子等价于else
// if((low%2==1&&high%2!=1)||(low%2!=1&&high%2==1)){
// return ((high-low)/2)+1;
// }
// if(low%2==1&&high%2==1){
// return ((high-low)/2)+1;
// }
}
// 测试用例
// 输入 low = 3, high = 7
// 输出 3
// 解释 3 到 7 之间奇数数字为[3, 5, 7]
int main() {
int low, high;
scanf("%d%d", &low, &high);
int re = countOdds(low, high);
printf("%d", re);
return 0;
}
【繁华倾夏】【每日力扣题解分享】【Day8】