因此,我正在尝试编写一个程序,该程序将计算项的总和,但每个项是前一项的3倍减去前一项的第二项,因此看起来像0, 1, 3, 8, 21, 55
,依此类推。例如,如果用户需要4个术语,则程序应输出21。遇到问题的部分是设置变量以存储先前的数字和第二先前的数字。这就是我到目前为止所拥有的。
#include <iostream>
using namespace std;
int main(){
int num;
int last;
int last2;
int current;
cout << "Number of terms to be shown: ";
cin >> num;
for(int i = 0; i < num; i++){
for(int term; term <= i; i++){
//THIS IS WHERE IM STUCK
}
}
}
我认为它是第一个for循环的方式将告诉嵌套的for循环运行多少次。在嵌套的for循环中,我认为是在更新current = (last * 3) - last2
和last
变量以保持术语列表不变的同时数学应该去的地方(last2
)。然后在循环之外我将cout << current
显示为术语。像往常一样,任何帮助都将受到赞赏!
答案 0 :(得分:3)
您的代码中存在未定义的行为,
for(int i = 0; i < num; i++){
for(int term; term <= i; i++){ // term not initiaized. and the loop is infinte
//THIS IS WHERE IM STUCK
}
}
您正在使用term
而不进行初始化。另外,您还停留在内部循环中,因为您应该在内循环中增加term
而不是i
。
所以您可以这样:
for(int i = 0; i < num; ++i){
for(int term = 0; term <= i; ++term){
// now rock here
}
}
答案 1 :(得分:2)
您通常会记住最后两个值,然后继续计算下一个值:
#include <iostream>
using namespace std;
int main()
{
int num;
cout << "Number of terms to be shown: ";
cin >> num;
int p1 = 1;
int p2 = 0;
cout << p2 << " " << p1 << " ";
num -= 2;
while (num > 0)
{
int current = 3 * p1 - p2;
cout << current << " ";
p2 = p1;
p1 = current;
num--;
}
}
答案 2 :(得分:1)
这是我在阅读您的问题时脑海中所看到的算法:
RewriteEngine On
RewriteRule ^([^/]*)$ /profile.php?id=$1 [L]
它使用recursion进行自我调用,这是一种可视化解决此类问题的好方法。该函数按原样运行,但仅对 small example.com/profile.php?id=abcdefgh
s有效,否则将导致堆栈溢出。这也很耗时,因为它要执行函数调用并计算很多次所有项。