我需要创建程序,在输出中我将获得第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),这对我来说没有意义。这段代码中的错误在哪里?
答案 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