标签:stat 正整数 java代码 ons ann 开始 pre int void
假定有k个连续的正整数和为N,其中连续序列的第一个数为x,则有x+(x+1)+(x+2)+...+(x+k-1) = N。从而可以求得x = (N - k(k-1)/2)? /? k。当x的值小于等于0时,则说明已经没有正整数序列的和为N了,此时循环退出。初始化k=2,表示2个连续的正整数和为N,则可以求出x的值,并判断从x开始是否存在2个连续正整数和为N,若不存在则k++,继续循环。java代码如下:
public static void main(String[] args) {
String result="NO";
Scanner sc = new Scanner(System.in);
int sum = sc.nextInt();
// (N - k(k-1)/2) / k
for ( int k=2; k < sum; k++) {
int x=(sum - k*(k-1)/2) / k; //开始值
int m= (sum - k*(k-1)/2) % k;
if (x<0){
result="NO";
break;
}
if (m!=0){
k++;
}else {
result="YES";
break;
}
}
System.out.println(result);
}
ConsecutiveInteger判断给定的整数n能否表示成连续的m(m>1)个正整数之和
标签:stat 正整数 java代码 ons ann 开始 pre int void
原文地址:https://blog.51cto.com/9283734/2441274