今天在做NOIP2022年真题时觉得自己基础还是比较薄弱,很多基础的东西都忘了,决定从真题中找到知识点,各个击破。第一道题涉及到“前缀和”这一工具,于是搜了下题库,找到一个入门级题目,昨晚竟然还有两个测试点没有AC,仔细看了测试数据,发现求和数组涉及浮点数的加法和比较,这里应该选用精度更高的double而不是float,另外对于数组定义的大小也尽可能大,防止出现溢出。 # [NOIP2002 普及组] 级数求和 ## 题目描述 已知:$$S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}$$。显然对于任意一个整数 $$k$$,当 $$n$$ 足够大的时候,$$S_n>k$$。 现给出一个整数 $$k$$,要求计算出一个最小的 $$n$$,使得 $$S_n>k$$。 ## 输入格式 一个正整数 $$k$$。 ## 输出格式 一个正整数 $$n$$。 ## 样例 #1 ### 样例输入 #1 ``` 1 ``` ### 样例输出 #1 ``` 2 ``` ## 提示 **【数据范围】** 对于 $$100\%$$ 的数据,$$1\le k \le 15$$。 **【题目来源】** NOIP 2002 普及组第一题 ```cpp #include using namespace std; float sum[100000000]; int main(){ int k,n; scanf("%d",&k); //遍历,找到第一个大于k的n,用sum[i+1]=sum[i]+1/i; sum[1]=1; n=1; while(sum[n]<=k){ n=n+1; sum[n]=sum[n-1]+1.0/n; // cout<
有话要说...