扬州网站建设推广,泊头网站建设甘肃,做网站开发的女生多吗,建设部二级结构工程师注销网站给一个整数n 求连续整数的和等于n 的个数 这道题 是一个数论的思想 解决思路#xff1a; 数必须是连续的#xff0c;可以转化成一个通用的公式#xff0c;以101为例做一般性推导#xff0c;#xff1a; 101 #xff1d; 101 #xff1d; 50 #xff0b; 51 #xff1d… 给一个整数n 求连续整数的和等于n 的个数 这道题 是一个数论的思想 解决思路 数必须是连续的可以转化成一个通用的公式以101为例做一般性推导 101 101 50 51 24 25 26 27 24 * 4 6 a *n (n - 1)*n/2 归纳出一般性结论 y a * n (n - 1) * n / 2 a y/n - (n - 1) / 2 猜想a是整数才能匹配 以y101为例 a 101/n - (n - 1) / 2 (n - 1) / 2的小数位为0.5或0当n 2时101/n小数位肯定不为0或者0.5所以a 101/n - (n - 1) / 2肯定不为整数 问题可以转化为求n的值 推演 示例1: 以15为例 15 a * n (n - 1) * n / 2 a 15/n - (n - 1) / 2 当n1: a 15 匹配 15 当n2: a*2 1 15 a 7 匹配 7,8 当n3: a*3 3 15 a 4 匹配 4,5,6 当n4: a*4 6 15 a 9/4 不能除尽 不匹配 当n5: a*5 10 15 a 1 匹配 1,2,3,4,5 a 1 不大于1,匹配结束 匹配结果为n3组 class Solution {
public:int consecutiveNumbersSum(int n) {//(a, k)// (a a k - 1)*k/2 n//2a 2n/k-k1 //2a 2n/k -k 1 2 2n/k k1 2n/k k//那么 就在 [1, 2n^1/2) 的范围去枚举 k // 如果k 是2n约数再结合 (2ak-1)*k 2n 就可以验证a合法//枚举k 就好 k 必是2n的约数并且为 较小 的约数//经过推论 满足上面的不等式 接着两个条件 就把答案挑出来了int n * 2 , ans 0;for(int k 1; k * k n; k){if(n % k ! 0){continue;}if((n / k - (k - 1))%2 0){ans;}}return ans;}
};// 真的太秀了