在我看来,这道题的核心在于循环的使用,因为Sn是1/1到1/n的合计,这个位置只要写对了,其他的就是输入输出而已了.伪代码如下://输入K,需要加判断,因为题目里写明了1到15 int n=1; double dResult=0;//当前值,判断和输出用;for(;dResult<k;n+=1)//这里的n+=1用n++代替亦可 dResult+=(double)1/n;//输出n如果Sn必须作为一个单独的方法去调用的话,直接把前后的输入输出以外的代码放到新方法里面,输入参数K,输出结果n,然后调用方法赋值给外面要输出的n(或者直接在输出语句里面调用,直接把返回结果输出,不过调试的时候有可能有点棘手).还有问题可回复,谢谢.
#include <stdio.h> int main() { double s = 0; int i; int k; scanf("%d",&k); for(i = 1; ; i ++) { s+=1.0/i; if(s>=k)break; } printf("%d\n", i); return 0; }
题目不完整.意思应该是说数列有上限.但这是调和级数,是没有上限的
var n,k,a:real; begin readln(k); repeat a:=a+1; n:=n+1/a; until n>k; write(a:0:0) end.
div是整除..改/..
#include<iostream> using namespace std; int main() { int k,i; float n=1; cin>>k; if(n<=k) { for(i=2;n<k;i++) n=n+1/i; cout<<i; } else cout<<1; return 0; }
你是不是要证:(1+1/2) ^ n > 1 + n/2?(1+1/2) ^ n用二项式展开,前两项就是1+ n/2,所以不等式成立
#include <stdio.h>#include <math.h>int main(void){ int n = 0; printf("please input a number\n"); scanf("%d",&n); n = abs(n); float Sn = 0.0; while(n > 0){ if(!(n%2)) { n = -n; } Sn += (float)1/n; n = abs(n); n--; } printf("Sn = %lg\n",Sn); return 0;}
#include "stdio.h"int main(void){ int n; double s; for(s=1.0,n=2;(s+=1.0/n)<8;n++); if(s-8 > 8-(s-1.0/n)) printf("s = %g\tn = %d\n",s-1.0/n,n-1); else printf("s = %g\tn = %d\n",s,n); return 0;}
数列 Sn=1+1/2+1/3+1/4+.+1/n求和,这个目前还没有数学公式可用 求不了,这个是发散的.没有极限,就是说可以加到正无穷,没办法表示 .