首先,我们分析一下题目。
1~n的数字,怎么样才能拼接到最多呢?
利用等差数列的原理
我们按照等差数列的原理:
1+2+3...+n= (1+n)∗n/2
看到没?
看到没?
是不是一个固定数*n/2?
再解释一下:
1+2+3...+n=(1+n)+(2+n−1)...+(n/2+n/2+1)=(1+n)+(1+n)...(1+n)
那么,有几个(1+n)呢?这是这题的关键。
第一个对应最后一个
第二个对应倒数第二个
1 ~ n分成X个子序列,每个子序列的长度为2,求X。
n/X=2,接下来就是简单的解方程了。我们很容易算出,X=n/2。
而奇数呢?(1+n)+(2+n−1)...n/2,我们只要这样:
把奇数分成(1+2+3...+n−1)+n=(1+n−1)∗n/2+n=n∗n/2+n
这不就能解了?奇数就是n∗(n/2+1)
所以,我们直接这样解。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",n/2+n%2);
return 0;
}
有帮助,赞一个