第三十五讲|问题求解方法——迭代
2015-07-15 17:21
253 查看
【项目1:另类求和】
求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。
例如2+22+222+2222( 此时a=2,n=4),a和n均由键盘输入。
心得 当时编这条的时候思维注意不是太集中。Tn=Tn*10+a一开始想起来,不知道为什么没写,费解。
变量太多,一不留神count++写成了n++,n为常量,常量不可以使用自增自减符。变量多以后记得在语句后面加上备注//。
【项目2:反弹的皮球】
一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?
运行结果
心得 之前把过程理解错了,只求了经过高度的一半。还有循环次数也搞错了,应该是9次,因为第一次就是你丢的过程。
【项目3:Bessel函数】
Bessel函数Jn(X)有以下的递推关系:
编写程序,利用递推关系,由任意的n和x≠0求Jn(X)。
运行结果
心得 还是迭代没有深刻理解好。jn,j1,j0三者互相表示,以求迭代。还有个2*i-1需要认真思考。因为迭代没有理解好,所以附上两个课堂事例。
例一 Fibonacci数列
有fn
没有fn
例二 级数公式
心得 再看一下pdf文件中,term的推导过程。好好体味一下迭代。
【项目4:贪财的富翁】
一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,....,你每天给我的钱是前一天的两倍,直到满一个月(30天),百万富翁很高兴,欣然接受了这个契约。请编程序,通过计算说明,这个换钱计划对百万富翁是否是个划算的交易。
提示:(1)需要计算出30天后陌生人给了百万富翁多少钱,百万富翁给了陌生人多少钱,然后才能做出判断;(2)想要看得清楚,可以选择列出每一天双方交易获得的钱数。
运行结果
【项目5:在北京买房】
现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
永远买不起。。。
求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。
例如2+22+222+2222( 此时a=2,n=4),a和n均由键盘输入。
#include "stdio.h" int main() { int a,n,count=1,Sn=0,Tn=0; printf("请输入a和n的值:\n"); scanf("%d,%d",&a,&n); while(count<=n) { Tn=Tn*10+a; Sn+=Tn; count++;//n已为常量不可以++ } printf("a+aa+aaa+...=%d\n",Sn); return 0; }运行结果
心得 当时编这条的时候思维注意不是太集中。Tn=Tn*10+a一开始想起来,不知道为什么没写,费解。
变量太多,一不留神count++写成了n++,n为常量,常量不可以使用自增自减符。变量多以后记得在语句后面加上备注//。
【项目2:反弹的皮球】
一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?
#include "stdio.h" int main() { float sn=100.0,hn=sn/2; int n; for(n=2;n<=10;n++) { sn+=(2*hn); hn/=2; } printf("第十次落地时共经过%f米\n",sn); printf("第十次反弹%f米\n",hn); return 0; }
运行结果
心得 之前把过程理解错了,只求了经过高度的一半。还有循环次数也搞错了,应该是9次,因为第一次就是你丢的过程。
【项目3:Bessel函数】
Bessel函数Jn(X)有以下的递推关系:
编写程序,利用递推关系,由任意的n和x≠0求Jn(X)。
#include "stdio.h" #include "math.h" int main() { int i,n; double x,J0,J1,Jn; printf("请输入n,x。\n"); scanf("%d,%lf",&n,&x); J0=sin(x)/x; J1=sin(x)/x*x-cos(x)/x; for(i=1;i<=n;i++) { Jn=(2*i-1)*J1/x-J0;//J(n+1)=(2n+1)/x*Jn-J(n-1)x J0=J1; J1=Jn; } printf("Jn = %.4f\n",Jn); } //注:变量jn代表的实际是公式中的jn+1,推导一下,2*i-1,而不是2*i+1,这是对的
运行结果
心得 还是迭代没有深刻理解好。jn,j1,j0三者互相表示,以求迭代。还有个2*i-1需要认真思考。因为迭代没有理解好,所以附上两个课堂事例。
例一 Fibonacci数列
有fn
#include "stdio.h" int main() { long f1,f2,fn; int i; f1=f2=1; printf("%ld\t%ld\t",f1,f2); for(i=3;i<=40;i++) { fn=f1+f2; printf("%ld\t",fn); if(i%5==0) printf("\n"); f1=f2; f2=fn; } }
没有fn
#include "stdio.h" int main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%ld\t%ld\t",f1,f2); if(i%2==0) printf("\n"); f1=f1+f2;//左f1代表第3个数,是第1、2数之和 f2=f2+f1;//左f2代表第4个数,是第2、3数之和 } }其中里面还是有个小技巧的,输出几个就换行。if(i%2==0) printf("\n");
例二 级数公式
#include "stdio.h" #include "math.h" int main() { double x,sum=1,term=1; int i=1; scanf("%lf",&x); while(fabs(term)>=1e-5) { term=term*(-1)*x*x/((2*i)*(2*i-1)); sum=sum+term; i++; } printf("%f\n",sum); }
心得 再看一下pdf文件中,term的推导过程。好好体味一下迭代。
【项目4:贪财的富翁】
一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,....,你每天给我的钱是前一天的两倍,直到满一个月(30天),百万富翁很高兴,欣然接受了这个契约。请编程序,通过计算说明,这个换钱计划对百万富翁是否是个划算的交易。
提示:(1)需要计算出30天后陌生人给了百万富翁多少钱,百万富翁给了陌生人多少钱,然后才能做出判断;(2)想要看得清楚,可以选择列出每一天双方交易获得的钱数。
#include "stdio.h" int main() { int i; double a=0,b=0.01; for(i=1;i<=30;i++) { a=a+100000; b*=2; printf("%lf\n%lf\n",a,b/2); } printf("%lf\n%lf\n",a,b/2); }
运行结果
【项目5:在北京买房】
现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
#include "stdio.h" int main() { int year=0,salary=400000; double house_price=2000000; while(house_price>=salary) { //salary*=1.05; salary+=400000; house_price*=1.10; year++; } printf("%d年后才能攒够钱买房。",year); }运行结果
永远买不起。。。
相关文章推荐
- RecyclerView、CardView实战
- 日期格式化
- BZOJ 1016 [JSOI2008]最小生成树计数
- javascript时间戳和日期字符串相互转换
- JAVA环境安装配置
- C#从SQL server数据库中读取l图片和存入图片
- LeakCanary:检测所有的内存泄露
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- localstorage和sessionstorage
- powerbuilder 备份和恢复数据库
- [Elasticsearch] 控制相关度 (四) - 忽略TF/IDF
- 二、八、十、十六进制相互转换
- 洛谷-广告计划-野题
- G - Shuffle'm Up
- HDU 1114 Piggy-Bank
- gulp使用外部配置文件
- android studio项目在模拟器运行显示中文乱码
- 内存屏障
- Cordova3.X 运用grunt生成plugin自定义插件骨架
- CPU中的缓存和操作系统中的缓存分别是什么?