数字序列

时间:2016-11-16 18:20:24

标签: c++ function numbers sequence

我需要创建程序,在输出中我将获得第n个数字或序列。序列看起来像这样:

( - 10,5,-2.5,1.25,-0.625 ......)

#include <iostream>

using namespace std;

double count (double n)
{
    if (n==1)
        return -10;
    else
        return (-10/((n-1)*(-2)));
}

double n;

main()
{
cout<<"n? : ";
cin>>n;
cout<<count(n);
return 0;
}

对我来说,每个人都认为对我来说很好,当我给程序1时,它给-10,当我给2时,它给出5,但在3它给出2.5,而不是-2.5,在4它给1 (6),这对我来说没有意义。这段代码中的错误在哪里?

3 个答案:

答案 0 :(得分:1)

您的问题的有效(优化代码)代码将是:

#include <iostream>
#include<math.h>
using namespace std;

double count (double n)
{
  double x = pow(2, n - 1);      //calculate the divisor
  return pow(-1, n) * (10 / x);  // divide 10 with divisor followed by assigning it  a sign
}

int main()
{
  int n;
  cout<<"n? : ";
  cin>>n ;
  cout<<count(n) << endl;
  return 0;
}
  

注意:由于代码中的分支而发生冗余。最好尽可能尝试编写直线代码(没有太多分支)。

答案 1 :(得分:0)

当您提供n=3时,(-10/((n-1)*(-2)))会为您提供(-10/((3-1)*(-2))) = 2.5。我的建议是返回(10/((n-1)*2)) * sign(n),如果n是偶数,sign(n)返回1,否则返回-1。

答案 2 :(得分:0)

我认为你的问题非常好&amp;简单的递归解决方案:

double count(int n){
    if (n <= 1) return -10;
    return count(n - 1)*-0.5;
}

示例电话:

#include <iostream>
#include <iomanip>

int main(){
    for (int i = 1; i < 20; ++i){
        std::cout << std::setw(15) << count(i) << std::endl;
    }

    return 0;
}

输出:

            -10
              5
           -2.5
           1.25
         -0.625
         0.3125
       -0.15625
       0.078125
     -0.0390625
      0.0195313
    -0.00976563
     0.00488281
    -0.00244141
      0.0012207
   -0.000610352
    0.000305176
   -0.000152588
   7.62939e-005
   -3.8147e-005