#include<iostream>
using namespace std;
class ulam
{
int num;
double prod;
int cot;
public:
ulam(){cot=0;}
ulam(int x)
{
num=x;
}
void process()
{
for(int i=0;num==1;i++)
{
cout<<num<<endl;
if((num%2) == 0)
{
prod=num/2;
}
else
{
prod=(3*num)+1;
}
num=prod;
cot++;
}
}
void display()
{
cout<<"the number of steps required is: "<<cot;
}
};
int main()
{
int n;
cout<<"enter the number"<<endl;
cin>>n;
ulam obj(n);
obj.process();
obj.display();
}
当我写这个代码时,我认为cot值是一个垃圾值。我无法弄清楚我哪里出错了。我上过课,因为我觉得它更具描述性。但这个程序背后的主要目的是找到一个数字达到一个并打印整个数字序列所需的步骤数。对于那些不了解坍塌猜想的人来说https://en.wikipedia.org/wiki/Collatz_conjecture
答案 0 :(得分:1)
for循环内部过程函数的条件是错误的。它应该是composer install
。您还需要初始化num!=1
。实际上你并不需要cot
。
prod
答案 1 :(得分:0)
在传递整数时初始化的构造函数中, ALSO 必须像这样初始化cot
:
ulam(int x)
{
cot = 0;
num = x;
}
更好的是,因为cot在构造时总是0
,所以只需将cot
设置为0
作为私有变量,如下所示:
class ulam
{
int num;
double prod;
int cot = 0;
public:
//....
};
这意味着您仍然可以使用无效的默认构造函数,而获取整数的构造函数不需要将cot设置为0
。
你的第二个问题是循环条件错误。它应该是num != 1
,而不是num == 1
。 num == 1
将永远不会运行循环,除非在cin
中传递了1。