C语言程序设计基础02 ------ 计算分数不等式2
【题目描述】
求m的取值范围。
【求解思路】
· 1、 式子中出现减运算,导致等式的解可能分段。
· 2、 设置循环条件,每三项一起求和,得一个解区间,然后回过来一项一项求和得个别离散解。
【求解代码】
1 /*============================================================================*\
2 * 计算d < 1 + 1/2 - 1/3 + 1/4 + 1/5 - 1/6+ ··· ±1/m
3 * 分母能被3整除的时候为"-"号
4 * @date 3/13/2013
5 * @CocoonFan
6 * VC++ 6.0
7 \*============================================================================*/
8
9 #include <stdio.h>
10
11 int main()
12 {
13 long d, m, k;
14 double s;
15
16 printf("请输入d:");
17
18 scanf("%d",&d);
19
20 printf("%d < 1 + 1/2 - 1/3 + 1/4 + 1/5 - 1/6+ ··· ±1/m 的解为:",d);
21
22 m = 1;
23 s = 0;
24
25 while(1){ /* 得一个解区间 */
26
27 s += 1.0/m + 1.0/(m+1) - 1.0/(m+2);
28
29 if(s > d)
30 break;
31
32 m += 3;
33
34 }
35
36 printf("\nm ≥ %ld\n",m);
37
38 k = 1; s = 0;
39
40 while(k < m){ /* 得一个离散解 */
41
42 if(k%3 > 0){
43
44 s += 1.0/k;
45
46 } else {
47
48 s -= 1.0/k;
49
50 }
51
52 if(s > d)
53 printf("m = %ld\n",k);
54
55 ++k;
56 }
57
58 return 0;
59 }
【测试结果】