2021-03-28:定义一种数:可以表示成若干(数量>1)连续正数和的数 。比如:5 = 2+3,
16lz
2021-03-28
2021-03-28:定义一种数:可以表示成若干(数量>1)连续正数和的数 。比如:5 = 2+3,5就是这样的数 ;12 = 3+4+5,12就是这样的数 。1不是这样的数,因为要求数量大于1个、连续正数和 。2 = 1 + 1,2也不是,因为等号右边不是连续正数 。给定一个参数N,返回是不是可以表示成若干连续正数和的数 。
福大大 答案2021-03-28:
1.自然智慧。
滑动窗口。中点到1。L左移,和增大;R左移,和减小。如果和=N,成立。
2.根据结果反推,找规律。
N是2次幂,不能表示成连续正数和;N不是2次幂,是连续正数和的数。
代码用golang编写。代码如下:
package mainimport "fmt"func main() { for i := 1; i <= 64; i++ { fmt.Println(i, isMSum1(i), isMSum2(i)) }}func isMSum1(num int) bool { if num == 1 { return false } R := (num + 1) >> 1 L := R - 1 sum := R for { if sum == num { return true } else if sum > num { sum -= R R-- } else { if L == 0 { break } sum += L L-- } } return false}func isMSum2(num int) bool { return num != (num & (^num + 1)) //return num != (num & (-num)) //return (num & (num - 1)) != 0}
执行结果如下:
左神java代码
评论
你的鼓励让我更有动力
赞赏
0人进行了赞赏支持
更多相关文章
- 关于一个NBA球队连续夺冠的SQL查询问题,解法很精妙~
- SQL中如何求解连续N天都满足的问题
- SQL如何求解多元一次方程和构造连续整数
- CISSP学习:第3章 业务连续性计划
- android中如何实现连续点击返回键退出整个应用 android两次返回
- Android:长按连续响应的Button
- Android自定义相机实现自动对焦和手动对焦
- Android(安卓)如何连续的扫描蓝牙的RSSI来测距离,实现三点定位
- Android(安卓)绘制多个连续带数字圆圈。