题解 P7127【「RdOI R1」一次函数(function)】

· · 题解

\texttt{「RdOI R1」一次函数(function) 官方题解}

这里为了方便,拟了一个 l_1,l_2,仅为参考,阴影部分表示的就是要求的三角形的面积。

对于直线 l_1,l_2,我们可以令 y = 0,则:

对于 l_1

kx+k-1=0 kx=1-k x=\dfrac{1-k}{k}

对于 l_2

(k+1)x+k=0 (k+1)x=-k x=-\dfrac{k}{k+1}

则,图像中三角形的底为

\because \dfrac{1-k}{k}>-\dfrac{k}{k+1} \therefore \dfrac{1-k}{k}-(-\dfrac{k}{k+1})=\dfrac{1}{k(k+1)}

因此我们现在得到一个方程组:

\begin{cases}y=kx+k-1\\y=(k+1)x+k\end{cases}

则,

kx+k-1=(k+1)x+k kx+k-1=kx+x+k x=-1

x=-1 时,y=-1

则:| -1 | = 1

则:图像中三角形的高为 1

因此我们列出一个方程:

S_1+S_2+S_3+\cdots+S_n =\dfrac{1}{2} \times 1 \times(\dfrac{1}{1 \times (1+1)}+\dfrac{1}{2 \times (2+1)}+ \cdots +\dfrac{1}{n\times(n+1)})

裂项后,得:

=\dfrac{1}{2} \times 1 \times(1-\dfrac{1}{n+1}) =\dfrac{1}{2} \times \dfrac{n}{n+1} =\dfrac{n}{2(n+1)}

官方std:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    scanf("%d", &t);
    while(t--){
        int n;
        scanf("%d", &n);
        if(n==0) puts("0");
        else{
            int a=n;
            int b=(n+1)*2;
            int tmp=__gcd(a,b);
            printf("%d/%d\n", a/tmp, b/tmp);
        }
    }
    return 0;
}