【数列】求最小 m 值
求满足下列不等式的最小 m。
1 + 2 + 3 + 4 + … + m ≥ n
例如:n=100,当 m =14 时,满足:1+2+3+4+…+13=91<100,而 1
+2+3+4+…+14=105>100。
输入:
n
输出:
m
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | 100↵ | 14↵ | 0 |
流程图
代码
#include <stdio.h>
void main(){
int n, m;
scanf("%d", &n);
for (m = 1; (1 + m) * m / 2 < n; m++){}
printf("%d\n", m);
}
课外思考
可不可以不使用循环来让程序运行的更快呢?
当然可以,想一想如果这是一道数学题你会怎么做?
这里不给解答。
代码
#include <stdio.h>
#include <math.h>
int main()
{
double n;
scanf("%lf", &n);
printf("%d\n",(int)ceil((sqrt(1+8*n)-1)/2));
}