解不等式第一篇
平方根不等式
对指定的整数n,试求满足以下平方根不等式的正整数m:
vm+√m+1+…+√2m≥n
1.程序设计要点
显然不等式左边是m的増函数,因而对于指定的正数n设置m循环,m从1开始递增1取值对每一个m求和:
s(m)=√m+√m+1+…+√2m
若s<m,m增1后继续按上式求和判别,直至s=n时输出不等式的解。
代码:
#include <stdio.h>
#include <math.h>
int main() {
int m;
double s, n;
scanf("%lf", &n);
m = 0;
while (1) {
m++;
s = 0.0;
for (int i = 1; i <= 2 * m; i++) {
s += sqrt(i);
}
if (s >= n)
break;
}
printf("%d\n", m);
return 0;
}
2.应用递推设计求解
事实上,可以建立s(m)与(m1)之间的递推关系,应用递推简化求解平方根不等式。
对于m1与m,累加和s(m-1)与s(m)显然满足如下递推关系
s(m)=s(m-1)-√m-1+√2m-1+√2m
初始条件:s(1)=1+√2
因此,前面程序设计中的双重循环可简化为单循环,(程序效率得以大大提高。
代码:
#include <stdio.h>
#include <math.h>
int main() {
int m;
double s, n, s1;
scanf("%d", &n);
m = 1;
s = 1.0 + sqrt(2);
do {
m++;
s1 = s; //用s1记录s
s = s + sqrt(m - 1) + sqrt(2 * m - 1) + sqrt(2 * m); //
} while (s < n);
printf("%d\n", m);
return 0;
}