CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

求解C++算法题目

楼主yinyyzz(深蓝)2005-01-07 16:17:21 在 专题开发/技术/项目 / 数据结构与算法 提问

实数数列:   一个实数数列共有N项,已知:  
     
    Ai=(Ai-1-Ai+1)/2+d  
   
  其中,1<i<N       N<60           (其中的Ai,Ai-1,Ai+1中,i是下标。   )  
   
  使用键盘输入N   d   A1     AN       m,求出Am,并输出。程序语言使用C++ 问题点数:100、回复次数:9Top

1 楼jp1984(mathfrog)回复于 2005-01-07 17:49:35 得分 0

这题要求   精确解并没有想象中的简单   ,不过可以先尝试推导通项公式   ,可用待定系数法求解,应该可以找到满足上面   递归方程   公式,然后再迭代求解   。    
      做起来可能有点麻烦   不过花点时间应该可以,没有什么复杂算法主要是数学推导Top

2 楼yinyyzz(深蓝)回复于 2005-01-07 18:15:10 得分 0

能给出详细程序么?Top

3 楼yinyyzz(深蓝)回复于 2005-01-07 23:39:55 得分 0

真不好意思,在公式   Ai=(Ai-1-Ai+1)/2+d中,i和i-1和i+1都是表示项数的下标。Top

4 楼yinyyzz(深蓝)回复于 2005-01-07 23:40:19 得分 0

谁能给出详细程序再加100!Top

5 楼yelling(Ray(←☆→射手))回复于 2005-01-08 00:28:19 得分 10

不懂你题目的意思,能不能举个例子Top

6 楼yinyyzz(深蓝)回复于 2005-01-08 11:42:48 得分 0

题目的意思就是给出数列的第一项和最后一项,并给出了d(d是两项之间的差)。求任意项的值Top

7 楼kongl123(kongl123)回复于 2005-01-08 16:32:16 得分 50

我不会求通项,不过因为题中的   N   有限大   可以用程序算出   :  
              An   =   c1   *   A1   +   c2   *   A2   +   cd   *   D.由程序gete(...)算得  
  由此算出   :  
              A2   =   (An   -   c1   *   A1   -   cd   *   D)   /   c2  
  于是可以由程序递归地算出   Am.程序如下:  
  #include   <iostream.h>  
   
  void   gete(int   n,int&   c1,int&   c2,int&   cd){  
  int   _c1   =   0,_c2   =   0,_cd   =   0;  
  if(n   ==   3){  
  c1   =   1;  
  c2   =   -2;  
  cd   =   2;  
  return;  
  }  
  if(n   ==   2){  
  c1   =   0;  
  c2   =   1;  
  cd   =   0;  
  return;  
  }  
   
  gete(n-2,_c1,_c2,_cd);  
  c1   =   _c1;  
  c2   =   _c2;  
  cd   =   _cd   +   2;  
   
  gete(n-1,_c1,_c2,_cd);  
  c1   -=   _c1   *   2;  
  c2   -=   _c2   *   2;  
  cd   -=   _cd   *   2;  
   
  }  
   
  double   compute(double   a1,double   a2,double   d,int   m){  
  if(m   ==   1)  
  return   a1;  
  if(m   ==   2)  
  return   a2;  
   
  double   result   =   0;//   an   =   2   *   d   +   a(n-2)   -   2   *   a(n-1)  
  result   +=   2   *   d;  
  result   +=   compute(a1,a2,d,m-2);  
  result   -=   2   *   compute(a1,a2,d,m-1);  
  return   result;  
  }  
   
  void   main(){  
   
  double   a1   ,an   ,a2,   d,n;  
   
  cout   <<   "input   n   ,   a1   ,   an   and   d:\t"   ;    
  cin   >>   n   >>   a1   >>   an   >>   d;  
  if(   n   >   2){  
  int   c1,c2,cd;  
  gete(6,c1,c2,cd);//  
                      //   after   finished   the   function.   an   =   cd   *   d   +   c1   *   a1   +   c2   *   a2.   so   a2   =...  
  a2   =   (an   -   cd   *   d   -   c1   *   a1)   /   c2;  
  }  
  int   m;  
  cout   <<   "input   m:\t";  
  cin   >>   m;  
  if   (m   <=   n)  
  cout   <<   compute(a1,a2,d,m)   <<endl;  
  }Top

8 楼mathe()回复于 2005-01-08 22:10:41 得分 0

这个是数学题,不需要用计算机Top

9 楼mathe()回复于 2005-01-08 22:19:08 得分 40

Let    
  A(k)=d+u*(-1+sqrt(2))^(k-1)+v*(-1-sqrt(2))^(k-1)  
  so  
  A1-d   =   u+v  
  AN-d   =   u*(-1+sqrt(2))^(N-1)+v*(-1-sqrt(2))^(N-1)  
  从这里可以计算出u,v  
  然后  
  Am=d+u*(-1+sqrt(2))^(m-1)+v*(-1-sqrt(2))^(m-1)Top

相关问题

  • 求解C++算法题目
  • C题目,求解!
  • 纸牌游戏的C算法求解
  • 算法求解
  • 求解算法
  • 求解八皇后问题算法(C语言版)
  • 求解一般线性方程组的算法及C程序
  • 算法求教:古老的数学问题.用C求解
  • 求解算法,急
  • 求解一算法

关键词

  • ai
  • gete
  • cd
  • double
  • compute
  • result

得分解答快速导航

  • 帖主:yinyyzz
  • yelling
  • kongl123
  • mathe

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo